• 位运算


    建议只对无符号数做位运算。有符号数会有出错的可能。

     

    移位

    左移相当于乘以2,右移相当于除以2。

    与运算(&) 可以取出某些位的值。 0x12345678 & 0x000000ff = 0x00000078   可以将某些位清零。0x12345678 & 0xffff00ff = 0x12340078

    或运算 (|)将某些位至1.  0x12345678 | 0x0000ff00 = 1234ff78

    循环右移: (a<<(N-n)) | a>>n

    循环左移:(a>>(N-n) ) | a<<n

     

    异或 运算 :

    与0异或 保持原值不变, 与1异或得到原值的反

    自己与自己异或 得到0 ; (汇编语言里面可以用到,将寄存器至0. 位运算比生成一个0在赋值 更快!)

    可以用来奇偶校验。

    可以用来 交换。如   

    a= a^ b ;

    b= b^ a;

    a = a ^b; 

    这个比取一个中间值swap 做交换要简洁的多。(但这种写法的代码效率其实比swap 要低得多)

     PS: 另一个不借助swap 做交换的例子:

    a=a*b;

    b=a/b;

    a=a/b;  其中b 不能为0

       

  • 相关阅读:
    高斯金字塔、拉普拉斯金字塔
    边缘检测:Canny算子,Sobel算子,Laplace算子
    数据结构-排序
    数据结构-查找
    数据结构-图
    数据结构-树
    数据结构-串
    数据结构-栈和队列
    数据结构-链表
    数据结构-线性表存储
  • 原文地址:https://www.cnblogs.com/yestreen/p/3051282.html
Copyright © 2020-2023  润新知