按位运算

  • C有这些按位运算的运算符
    • & 按位的与
    • | 按位的或
    • ~ 按位取反
    • ^ 按位的异或
    • << 左移
    • >> 右移

按位与 &

  • 如果(x)i ==1 并且 (y)i ==1,那么(x&y)i =1
  • 否则的话(x&y)i = 0
  • 按位与常用于两种应用:
    • 让某一位或某些位为0:x & 0xFE
    • 取一个数中的一段:x & 0xFE


按位或 |

  • 如果(x)i ==1 或 (y)i ==1,那么(x|y)i =1
  • 否则的话(x|y)i = 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

这里写图片描述


逻辑运算VS按位运算

  • 对于逻辑运算,它只看到两个值:0 和 1
  • 可以认为逻辑运算相当于把所有的非0值都变成1,然后做按位运算
    • 5 & 4 ——>4 而 5 && 4 ——>1 & 1 ——>1
    • 5 | 4 ——>5 而 5 || 4 ——>1 | 1 ——>1
    • ~4 ——>3 而!4——>!1——>0

按位异或^

  • 如果(x)i == (y)i,那么(x^y)i = 0
  • 否则的话,(x^y)i = 1
  • 如果两个位相等,那么结果为0;不相等,结果为1
  • 如果x和y相等,那么x^y的结果为0
  • 对一个变量用同一个值异或两次,等于什么也没做
    • x^y^y ——>x
版权声明:本文为匿名原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: