C语言:按位运算

C语言:按位运算

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

按位与&

  • (x) == 1并且(y) == 1,那么(x & y) == 1

  • 否则的话(x & y) = 0

  • 按位与常用于两种应用:

    • 让某一位或某些位为0 : x & 0xFE
    • 取一个数种的一段: x& 0xFF

按位取或|

  • 如果(x) == 1或(y) == 1,那么(x | y) =1

  • 否则的话, (x | y) == 0

  • 按位或常用于两种应用

    • 使得一位或几个为1: x|0x01
    • 把两个书拼起来: 0x00FF | 0xFF00
  1010 1010   AA

| 0101  0100  54
-----------------
  11111 1110  FE

按位取反 ~

  • (~x) = 1- (x)
  • 把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) == (y) , 那么(x ^ y) = 0
  • 否则的话,(x ^ y) == 1
  • 如果两个位相等,那么结果为0;不相等,结果为1
  • 如果x和y相等,那么x ^ y的结果为0
  • 对于一个变量用同一个值异或两次,等于什么也没做
    • x ^ y ^ y —>x

你可能感兴趣的:(C语言:按位运算)