问答网 问答 其它 c语言中的位运算符中‘按位取反’是怎么运算的比如操作数位操作位表达式数字~10→~1010→()→-11括号中该是什么。怎么得到的-11还是不明白。既然~1010
问题标题:
c语言中的位运算符中‘按位取反’是怎么运算的比如操作数位操作位表达式数字~10→~1010→()→-11括号中该是什么。怎么得到的-11还是不明白。既然~1010
问题描述:

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

比如操作数位操作位表达式数字

~10→~1010→()→-11

括号中该是什么。怎么得到的-11

还是不明白。既然~1010取反后是0101了。0101不就是5的二进制吗。....怎么又跑出-11了。(最好来个计算公式)

孙淑玲回答:
  ~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
梅中义回答:
  计算机存储的数不是只有4位的   像32位计算机,存储int类型的数就用32位   所以上面10的二进制码1010,前面还有好多0,取反的时候要一起取反   简单的话,以8位二进制码为例   括号中就是11110101,也就是00001010取反的结果   这是补码   -10的补码是10的补码(正数的补码就是原码)取反加1   既然这里只取反没加1,所以就是-10-1=-11   数转补码   正数就是二进制码   负数是相反数(即取绝对值)的二进制码取反加1   补码转数   正数(二进制最高位为0)直接转   负数(二进制最高位为1)减1取反转成十进制进制数再加个负号
点击显示
其它推荐
热门其它推荐
  • 其它