按位运算

按位与&

如果(x)i == 1 并且(y)i == 1,那么(x & y)i = 1,否则(x & y)i = 0;按位同为1即为1 否则为0;

  • 按位与常用于两种应用:
  • 让某一位或某些位为0 :x & 0xFE
  • 取一个数中的一段: x & 0xFF

按位或 |

如果(x)i == 1 或 (y)i == 1,那么(x | y)i = 1,否则 (x | y)i = 0;按位有1则为1,否则为0

  • 按位或长用于两种应用
  • 使得一位或几个位为1: x | 0x01
  • 把两个数拼起来: 0x00ff | 0xff00

按位取反 ~

(~x)i = 1 - (x)i; 把1变成0,0变成1;

  • 想得到全部位为1的数: ~0;
  • 7的二进制是0111,x|7使得低3位为1,而x & ~7,就使得低3位为0

按位异或 ^

如果(x)i == (y)i,那么(x ^ y)i = 0,否则,(x ^ y)i = 1;按位相同为0,否则为1;

  • 如果x和y相等,那么x^y的结果为0;
  • 对一个变量用同一个值异或两次,等于什么也没做(原值),即 x ^ y ^ y = x.

左移<<

i << j

  • i中所有的位向左移动j个位置,右边填入0;
  • 所有小于int的类型,移位以int的方式来做,结果是int
  • x << 1 等价于 x *= 2
  • x << n 等价于 x *= 2^n

右移>>

i >> j

  • i中所有的位向右移动j个位置,左边填入0;
  • 所有小于int的类型,移位以int的方式来做,结果是int
  • 对于unsigned的类型,左边填入0
  • 对于signed的类型,左边填入原来的最高位(保持符号不变)
  • x >> 1 等价于 x /= 2
  • x >> n 等价于 x /= 2^n
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容