黑马程序员技术交流社区

标题: 负数二进制问题? [打印本页]

作者: HM马明宇    时间: 2013-3-10 20:37
标题: 负数二进制问题?
以前也学过java,但是对进制接触很少,现在又回过头来苦逼的学进制。看视频的时候有一个疑问,为什么负数的二进制是正数的二进制取反再加1呢?跟10进制有什么联系么?

作者: 聂益飞    时间: 2013-3-10 20:48
2进制只是个最底层的表现形式 本身没有负数的概念, 具体关于数值可以是有负数的,计算机专门用补码来标示而已, 比如整形是4个字节也就是32位要拿去最高位作为正符标示位数,
那么整数的范围正是0000000000000000-01111111111111111;剩余的就是负数范围即1000000000000000 11111111111111111。
作者: 谢洋    时间: 2013-3-10 20:55
不管什么数,在计算机上存储都是以二进制的形式存在的。
只不过最高位用来表示符号的,如最高位为了1表示该数为负数,反之为正数
因为二进制对于人来说不够直观,我们会通过某些方法把这些数据转为我们较
为容易识别的十进制形式,底还是以二进制的形式存在及运算的
作者: 王智威    时间: 2013-3-10 21:03
这就是补码计算的公式啊,第一位为标示位,用来标示正负的,公式是这样的
如果x为整数,那么-x就是2^(n-1)+x。

作者: 张子凯    时间: 2013-3-11 08:28
本帖最后由 张子凯 于 2013-3-11 08:30 编辑

        计算机负数之所以采用反码是因为计算机只能计算加法,将负数用反码表示就能利用加法算减法。
        为了理解补码表示法,首先要了解模和同余的概念。
        模式之一个计量器的容量,可以用M表示。一个4位的二进制计数器,当计数器从0到15后,再加1,计数器又变回0.这个计数器的容量是M=2^4=16,即模为16.
        同余概念是指两个整数A和B除以同一正整数M,所得余数相同,则称A和B对M同余,即A和B在以M为模时是相等的,可以写作A=B( mod M)。
        利用模和同余概念的补码表示法在进行算术运算时可以使减法运算化为加法运算,从而简化机器的电路。
        举个例子:假设时钟现在是8点,正确的时间是6点,这时调准时钟的方法有两种:
        1,将分针倒着转2圈(即倒拨时钟2小时),8-2=6(做减法)。
        2,将分钟正着转10圈(时钟正拨10小时),8+10=6( mod 12),这是做加法。
        此时        8-2=8+10(mod 12)
        设:    A=-2     B=10
        则         10/12=(12-2)/12=1+(-2)/12
        故-2和10同余。同余的两个数具有互补关系,-2与10对模12互补,也可以说-2的部署是10(以12为模)
        可见,只要确定了模,就可以找到一个附属等价的整数(该整数即为负数的补数),来代替此负数,而这个整数可以用模加上负数本身求得,这样就可以把减法运算利用加法实现了。D:\My Documents\My Pictures\补码.bmp

补码.JPG (27.09 KB, 下载次数: 122)

补码.JPG





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