c语言中的位运算符中‘按位取反’是怎么运算的
发布网友
发布时间:2022-04-19 22:43
我来回答
共5个回答
热心网友
时间:2022-04-25 20:47
计算机存储的数不是只有4位的
像32位计算机,存储int类型的数就用32位
所以上面10的二进制码1010,前面还有好多0,取反的时候要一起取反
简单的话,以8位二进制码为例
括号中就是11110101,也就是00001010取反的结果
这是补码
-10的补码是10的补码(正数的补码就是原码)取反加1
既然这里只取反没加1,所以就是-10-1=-11
数转补码
正数就是二进制码
负数是相反数(即取绝对值)的二进制码取反加1
补码转数
正数(二进制最高位为0)直接转
负数(二进制最高位为1)减1取反转成十进制进制数再加个负号
热心网友
时间:2022-04-25 22:05
~1010的反码是0101
而负数在计算机中的表示是用补码,-11求补码过程:1011取反->0100加1->0101
即-11等价于~10
括号中的是0101
补充说明:是这样的,1010在32位计算机中的存储实际上是00001010,取反后是11110101,在计算机中首位是0表示正数,是1表示负数,即11110101表示的是一个负数,即要由11110101求这个负数,即求补码的逆,步骤:先减1得11110100,再取反,取反时符号位不变,得10001011,即-11。用4位表示的话可以填0101,或者是8位的11110101
热心网友
时间:2022-04-25 23:39
位运算中的按位取反操作,使用的运算符为~,
其计算原则为:
按照操作数的二进制值,逐位计算,如果原始值为0,则结果该位上为1,
否则结果该位上为0。
比如char类型的0x78按位取反
~0x78
=~B0111
1000//转为二进制值。
=B1000
0111//按位取反。
=0x87
热心网友
时间:2022-04-26 01:47
“位”运算符,是假话。
实际上,是按照一个【字】,来运算的。
热心网友
时间:2022-04-26 04:12
a为int类型
通常占4个字节
2的原码:0000
0000
0000
0000
0000
0000
0000
0010
取反:
1111
1111
1111
1111
1111
1111
1111
1101
最高位是1所以是负数,求其原始数据,方法是
再次取反加1(符号位不变)
取反:
1000
0000
0000
0000
0000
0000
0000
0010
加1
1000
0000
0000
0000
0000
0000
0000
0011
所以是
-3