c语言中的位运算符中‘按位取反’是怎么运算的

Python045

c语言中的位运算符中‘按位取反’是怎么运算的,第1张

计算机存储的数不是只有4位的

像32位计算机,存储int类型的数就用32位

所以上面10的二进制码1010,前面还有好多0,取反的时候要一起取反

简单的话,以8位二进制码为例

括号中就是11110101,也就是00001010取反的结果

这是补码

-10的补码是10的补码(正数的补码就是原码)取反加1

既然这里只取反没加1,所以就是-10-1=-11

数转补码

正数就是二进制码

负数是相反数(即取绝对值)的二进制码取反加1

补码转数

正数(二进制最高位为0)直接转

负数(二进制最高位为1)减1取反转成十进制进制数再加个负号

按位取反就是0换成1,1换成0.

2的2进制是0000....0010,取反后就是1111....1101,就是-3的补码.

计算机保存的都是补码,正数补码与原码相同,负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。

c语言的逻辑运算包括与、或、非

按位取反使用运算符~

如0xff按位取反为~(0xff)

按位取反后的结果为0x00

需要注意的是,c语言中的逻辑运算&和&&是不同的

0xff&0xa0=0xa0

而0xff&&0xa0=1

一个运算符是按位操作

其返回值是按位操作的结果

两个运算符是逻辑表达式,其返回值只有0和1