A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lovetonia 中级黑马   /  2015-11-11 16:48  /  1215 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

14 个回复

倒序浏览
所以有数据结构的规定啊。。。
你这个
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数据

点评

谢谢指点哟亲  发表于 2015-11-11 18:35
回复 使用道具 举报
java中将整数类型的二进制第一位定为符号位。如byte占8个二进制位,byte的取值范围为-128~127,即-2的7次方到2的7次方,即数字大小占7个二进制位,第一个为符号位。
回复 使用道具 举报
jiao731097245 发表于 2015-11-11 17:19
java中将整数类型的二进制第一位定为符号位。如byte占8个二进制位,byte的取值范围为-128~127,即-2的7次方 ...

Soga,明白了。谢谢指导
回复 使用道具 举报
lovetonia 发表于 2015-11-11 17:45
Soga,明白了。谢谢指导

一起努力
回复 使用道具 举报

赞一下您的用心思考!
回复 使用道具 举报
这种东西了解就行了,多敲点代码才是正事
回复 使用道具 举报
前几天公司的java程序员解释了下,说没啥用,实际工作用不到,但我还是网上搜索了下。计算机是员工补码的形式存储整数,所有的运算都是加法,没有减法。我们看到的减法,都是使用补码方式加法算出来的,补码的最高为表示负号。
回复 使用道具 举报
不能! 其实在计算机中会识别你所申请的变量是有符号类型变量还是无符号类型变量,如果是有符号类型的话,最高位就为符号位(对应0为正数,1位负数),计算机在存储变量的过程中都是以补码的形式保存的,计算机并不会识别正负数,但是他会去读取计算机寄存器组里面的对应寄存器中的某一个位(以上都是个人总结,详细请看<计算机组成原理>以及<微机原理>)

点评

谢少侠,看来你上过专业课。我二本肄业渣男一枚,专业也不是计算机。不过既然选择培训,一起努力吧。我要抽空闲去网易云课堂补补基础  发表于 2015-11-13 21:10
回复 使用道具 举报
yubail 中级黑马 2015-11-13 19:35:13
10#
我就是来顶一下
回复 使用道具 举报
这有必要么?嗯,有的
回复 使用道具 举报
黑锅 中级黑马 2015-11-23 14:48:48
12#
学到了。
回复 使用道具 举报
二进制的第一位代表的是符号位,正的是0,负的是1,其他位才是值,-6的原码应该是1000-0000 0000-0000 0000-0000 0000-00110
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马