c语言--位移操作符和位操作符详解

1. 位移操作符(对整数的二进制位进行左移右移)

位移操作符包括左移操作符和右移操作符

<< 左移操作符

>> 右移操作符

1.1左移操作符

<< 的移位规则是让左边的二进制位丢弃,右边补0

规则代码及图形举例

可以看出此时n的值是不变的,只是二进制位发生变化

1.2 右移操作符

右移操作符的移位规则:首先右移运算分为两种
 1.逻辑右移:左边⽤0填充,右边丢弃

 2.算术右移:左边⽤原该值的符号位填充,右边丢弃

决定采用哪种运算规则是根据采用哪种编译器来决定的,大多数编译器遵循算术右移的运算规则

规则代码及图形举例

2.位操作符

位操作符包括

1.& 按位与

2. |  按位或

3.^  按位异或

4.~ 按位取反

注意这些操作符都是针对整数中得二进制位进行运算的操作符

2.1 & 按位与操作符

运算规则:对应的二进制位进行运算,有0则为0,同时为1才为1

规则代码举例

2.2 按位或操作符

运算规则:对应的二进制位进行运算,有1则为1,同时为0才为0

规则代码举例

2.3 ^ 按位异或操作符

运算规则:对应的二进制位进行运算,相同为0,相异为1

规则代码举例

2.4 ~按位取反操作符

运算规则:对应的二进制位进行取反即可

3 代码实践练习

3.1

根据按位异或的操作符的运算规则(相同为0,相异为1),我们不难想到,对于一个任意的整数n

n^0=n   n^n=0  且异或操作符是可以实现交换律的 例如 a^b^a=b

根据这些思路我们可以写出以下代码

3.2编写代码实现:求⼀个整数存储在内存中的⼆进制中1的个数

方法1:

此方法注意传参使要让形参转化位无符号的整形,不然实现不了负数中的二进制位的个数

方法2

方法3

方法3 展示的是一种算法 感兴趣的可以尝试举例理解一下,下面我直接给结论

对于任意一个整数n n&n-1可以让n最右边的二进制位中的1变为0,直到全部为0 让n变为0,这样每次进行这样的一步操作就可以知道n中的二进制位中有一个1.所以可以写出下面的代码

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值