黑马程序员技术交流社区

标题: 关于位运算的问题 [打印本页]

作者: hi虚无缥缈    时间: 2015-5-28 21:33
标题: 关于位运算的问题
unsigned short a=0-1; 0000 0000 0000 0000 减去 0000 0000 0000 0001后,怎么解释等于 1111 1111 1111 1111。
作者: woaidd99    时间: 2015-5-28 22:52
这个坐观大神回答
作者: 七尺阳光    时间: 2015-5-28 23:17
这个跟二进制的原码,反码和补码有关.具体的也不是很明白
作者: lclofty    时间: 2015-5-29 10:13
计算机中的数字是以补码形式储存的,0 - 1 = -1等价于0 + (-1) = -1对应补码就是0000 0000 0000 0000  + 1111 1111 1111 1111 = 1111 1111 1111 1111.
具体来说是补码的进制转换问题。
先将十进制转换成二进制的原码(首位是符号位0代表正数1代表负数),正数原码补码相同,负数补码是由原码除符号位(首位)外所有位取反加一得到的。所以0的二进制原码和补码为0000 0000 0000 0000,-1的二进制原码是1000 0000 0000 0001,-1的二进制补码为1111 1111 1111 1110 + 1 = 1111 1111 1111 1111。
再将二进制补码转换成十进制。0000 0000 0000 0000的十进制数就是0,二进制补码转换成十进制是取反加一得到十进制数的绝对值(而十进制的正负由补码的符号位,也就是首位决定,0代表正数1代表负数),1111 1111 1111 1111 取反得到0000 0000 0000 0000 ,加一得到0000 0000 0000 0001,补码首位为1代表是负数,所以1111 1111 1111 1111转换成十进制数是-1。
表达能力不是很好,希望能帮到你!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2