C语言位运算那些子事儿

1、按位取反

就是将每一位是1的变成0,是0的变成1。运算符为~。
二进制的0010按位取反为会得到1101
二进制的0000按位取反后会得到1111

在计算机中,数值以补码来表示。所有的位运算也都要先将数值从原码被变为补码后才能进行。
补码的最左位为符号位:
正数的补码最左位的符号位为0,其余位为数的原码二进制表示。
负数的补码最左位的符号位为1,其余位为原码二进制每位取反后再加1。

而取反操作都是通过操作补码形式存储在计算机内存中的每一位完成的。如果要用人脑计算一个十进制整数在计算机中被按位取反的结果,则需要:
-------先把十进制的数变为二进制数
-------再根据二进制原码计算出储存在计算机中的补码
-------然后对补码按位取反得到取反结果
-------再反过来计算这个补码形式取反结果对应的原码
-------最终根据原码获得取反结果的十进制数

在 C 语言程序中,只需要通过 ~ 运算符就可以轻松搞定
在这里插入图片描述
在这里使用了%08x进行占位,其中%x表示以 16进制形式作为数字格式,在中间插入的08可以使得输出不足 8 个数字时,在左侧补 0 直到达到 8 位数字。
在这里插入图片描述

2、按位与运算

在每一位上对0和1进行逻辑与运算。这一运算的运算符为&。
二进制的1000和二进制的0000进行按位与运算后会得到0000
二进制的1000和二进制的1100进行按位与运算后会得到1000
在这里插入图片描述

3、按位或运算

在每一位上对0和1进行逻辑或运算。这一运算的运算符为|。
二进制的1000和二进制的0000进行按位或运算后会得到1000
二进制的1000和二进制的1100进行按位或运算后会得到1100
在这里插入图片描述

4、移位运算

它包括左移运算、右移运算两种,对应的运算符分别为 << 和 >>。
由于一块分配好的内存位数是有限的,左移运算发生时,这些内存中的最左位会被舍,最右位会被补0。
对二进制1000进行左移,将得到0000
对二进制0011进行左移,将得到0110
相应的,右移运算发生时,这些内存中的最右位会被舍弃,最左位会被补0。
对二进制1000进行右移,将得到0100
对二进制0011进行右移,将得到0001

5、按位异或运算

运算符 ^,a ^ b的位运算规则是:当且仅当被运算两位上数不同时该位运算结果为1,否则为0

所有给出的选项中选出运算结果是 31 的:
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值