黑马程序员技术交流社区

标题: 是如何得到byte 类型的取值范围的呢? [打印本页]

作者: 黄晓天    时间: 2011-11-11 18:45
标题: 是如何得到byte 类型的取值范围的呢?
byte类型在内存中占一个字节,一个字节占8位,那是怎么计算出byte类型的取值范围的呢?请给出计算的详细过程,谢谢!
作者: 黄晓天    时间: 2011-11-11 18:53
0111 1111正数的二进制,计算成十进制为64+32+16+8+4+2+1=127
1000 0000负数的二进制,计算成十进制:1000 0000-->取反为0111 1111-->加1为1000 0000-->128
作者: 黄晓天    时间: 2011-11-11 18:53
在加上负号,即-128,所以范围为-128  到 127
作者: 张志东    时间: 2011-11-11 18:59
是个有深度的问题,从正常的逻辑来看bytes能表示2 的8 次方个数据好像就是  0  ~ 2的8次方,但是在计算机的世界里有符号的存在变成了- 128 ~ 127 了,至于怎么计算,回去问数学老师去吧,太有深度了,俺没学会!
作者: 别让生命去等待_    时间: 2011-11-11 19:05
这是真理吧,规定的吧,能推的么?求指教
作者: 咪咪    时间: 2011-11-11 19:55
能推出来的,byte是8位,意思就是一个数用八个2进制数表示,八个二进制数表示的最大值肯定是01111111但是最高位为符号位,符号位是是0代表数,所以正数的最大值为01111111那这七个1用十进制表示出来是多少呢?当然是2的7次方减1了,即128-1=127。八个2进制表示的最小值是多少呢?当然是00000000但最小值符号位必须为1才位负数,所以10000000为最小值,那么他的十进制为-128,所以取值范围为01111111---10000000即127--  -128
作者: 咪咪    时间: 2011-11-11 19:57
加分啊,回答的够精确了,浪费我看视频的时间了,我是用手机回的帖速度慢,很耗时间的,不给分对不起我浪费的时间哈。加油…
作者: 铿锵科技    时间: 2013-2-1 00:59
本帖最后由 铿锵科技 于 2013-2-1 01:01 编辑

是个有深度的问题,从正常的逻辑来看bytes能表示2 的7次方个数据好像就是  0  ~ 2的7次方,但是在计算机的世界里有符号的存在变成了- 128 ~ 127 了
正数最高位为0,负数最高位为1,负数为正数取反后加1,例如00000001代表正1取反后变为11111110+1=11111111八个1代表负1,
所以最大的正数为01111111就是2的7次方减1
没有误导童鞋吧,有错请指正
作者: 克零岚    时间: 2013-3-1 09:37
最初刚刚开始的时候,我怎么也弄不明白java中为什么可以到得到-128的值,经过自己在网上查找一些相关的资料之后,终有所悟。在csdn论坛上的这个图很好的说明了这个问题:

0 00000000

1 00000001

... ........

127 01111111

----------------

共 128 个

-1 11111111

-2 11111110

... ...

-128 10000000

----------------

共 128 个


我们都知道byte占8位。而2的8次方等于256,也就是byte最多可以表示256个不同的数,

0~127:128个

-0~127:128个

但是这里0与-0表示一样的数了,所以就用-0的二进制补码表示到-128里面去了





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