黑马程序员技术交流社区

标题: 关于负数二进制的问题 [打印本页]

作者: lovetonia    时间: 2015-11-11 16:48
标题: 关于负数二进制的问题
有一个问题虽然跟java的关系不太密切,但是我想,从事程序员的工作就要有学习探求的精神。所以这个问题想了许久,希望有明白人能给小弟指点一二。
是这样的,我们知道数字在计算机中是以二进制存储的,而对负数而言,课程中说是以对应的正数的二进制取反再+1,
举例说明:
    int,6在计算机中的32位二进制码是
    0000-0000  0000-0000  0000-0000  0000-0110
    那么-6既是
    1111-1111  1111-1111  1111-1111  1111-1010
疑问来了,这个-6的二进制不能表示一个很大的正数么?
  如果不能,那计算机是怎么规定这个表示的?
  如果能,那么计算机又是如何区分的?

作者: 海狮    时间: 2015-11-11 17:15
所以有数据结构的规定啊。。。
你这个
1111-1111  1111-1111  1111-1111  1111-1010
的二进制数据前提是int类型,
计算机辨认,int类型的1111-1111  1111-1111  1111-1111  1111-1010就是-6
没有不带数据类型1111-1111  1111-1111  1111-1111  1111-1010数据
作者: jiao731097245    时间: 2015-11-11 17:19
java中将整数类型的二进制第一位定为符号位。如byte占8个二进制位,byte的取值范围为-128~127,即-2的7次方到2的7次方,即数字大小占7个二进制位,第一个为符号位。
作者: lovetonia    时间: 2015-11-11 17:45
jiao731097245 发表于 2015-11-11 17:19
java中将整数类型的二进制第一位定为符号位。如byte占8个二进制位,byte的取值范围为-128~127,即-2的7次方 ...

Soga,明白了。谢谢指导
作者: jiao731097245    时间: 2015-11-11 17:46
lovetonia 发表于 2015-11-11 17:45
Soga,明白了。谢谢指导

一起努力
作者: tiandaochouqin    时间: 2015-11-13 09:43

赞一下您的用心思考!
作者: zypt0218    时间: 2015-11-13 10:16
这种东西了解就行了,多敲点代码才是正事
作者: 李永佳    时间: 2015-11-13 12:06
前几天公司的java程序员解释了下,说没啥用,实际工作用不到,但我还是网上搜索了下。计算机是员工补码的形式存储整数,所有的运算都是加法,没有减法。我们看到的减法,都是使用补码方式加法算出来的,补码的最高为表示负号。
作者: Phy_zhang    时间: 2015-11-13 17:36
不能! 其实在计算机中会识别你所申请的变量是有符号类型变量还是无符号类型变量,如果是有符号类型的话,最高位就为符号位(对应0为正数,1位负数),计算机在存储变量的过程中都是以补码的形式保存的,计算机并不会识别正负数,但是他会去读取计算机寄存器组里面的对应寄存器中的某一个位(以上都是个人总结,详细请看<计算机组成原理>以及<微机原理>)
作者: yubail    时间: 2015-11-13 19:35
我就是来顶一下
作者: 隔壁马良    时间: 2015-11-23 00:20
这有必要么?嗯,有的
作者: 黑锅    时间: 2015-11-23 14:48
学到了。
作者: z940505    时间: 2015-11-23 15:08
二进制的第一位代表的是符号位,正的是0,负的是1,其他位才是值,-6的原码应该是1000-0000 0000-0000 0000-0000 0000-00110




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