0
点赞
收藏
分享

微信扫一扫

认识 位运算

吴陆奇 2022-05-01 阅读 46
c语言

一、有符号整数位运算

1.1 左移

运算规则:符号位不变,移出位丢弃,空出位补0
正整数左移N位时低位依次填充N个0,负整数左移N位时低位依次填充N个0

0000 0010 << 1 = 0000 0100  
0000 1010 << 2 = 0010 1000 
1000 0010 << 1 = 1100 0100   
1000 1010 << 3 = 1101 0000

1.2 右移

运算规则:符号位不变,移出位丢弃,空出位补符号位
正整数右移N位时高位依次填充N个0,负整数右移N位时高位依次填充N个1

0000 0010 >> 1 = 0000 0001  
0000 1010 >> 2 = 0000 0010 
1000 0010 >> 1 = 1100 0001   
1000 1010 >> 3 = 1111 0001

1.3 按位与

两个位都为1时,结果才为1

0001 & 0001 = 1
0001 & 0000 = 0
0000 & 0000 = 0000

1.2 按位或

两个位都为0时,结果才为0

0001 | 0001 = 0001
0001 | 0000 = 0001
0000 | 0000 = 0000

1.2 按位取反

0变1,1变0

∼0 = 1
∼1 = 0

1.2 按位异或

两个位相同为0,相异为1
性质:

  1. 任何数和 0做异或运算,结果仍然是原来的数;

  2. 任何数和其自身做异或运算,结果是 0。

    0001 ∧ 0001 = 0000
    0001 ∧ 0000 = 1
    0000 ∧ 0000 = 0
    

二、常用的小技巧

2.1 消去最后一位的1

x & (x-1)

2.2 实现乘除法

将 x 左移一位实现 × 2
a < < 1 等价于 a ∗ 2

将 x 右移一位实现 ÷ 2
a > > 1 等价于 a / 2

2.3 交换两整数

 void swap(int &a,int &b)
 {
      a ^= b;
      b ^= a;
      a ^= b;
  }

2.4 判断奇偶数

在二进制中,最低位决定了是奇数还是偶数,因此一个数与 1 相与,为0则是偶数,为1则是奇数

举报

相关推荐

位运算(&、|、^、~、>>、<<)

【位运算】

位运算

逻辑运算 位运算

位运算操作

java 位运算

0 条评论