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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄晓天 黑马帝   /  2011-11-11 18:45  /  3900 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

byte类型在内存中占一个字节,一个字节占8位,那是怎么计算出byte类型的取值范围的呢?请给出计算的详细过程,谢谢!

8 个回复

倒序浏览
0111 1111正数的二进制,计算成十进制为64+32+16+8+4+2+1=127
1000 0000负数的二进制,计算成十进制:1000 0000-->取反为0111 1111-->加1为1000 0000-->128
回复 使用道具 举报
在加上负号,即-128,所以范围为-128  到 127
回复 使用道具 举报
是个有深度的问题,从正常的逻辑来看bytes能表示2 的8 次方个数据好像就是  0  ~ 2的8次方,但是在计算机的世界里有符号的存在变成了- 128 ~ 127 了,至于怎么计算,回去问数学老师去吧,太有深度了,俺没学会!
回复 使用道具 举报
这是真理吧,规定的吧,能推的么?求指教
回复 使用道具 举报
咪咪 来自手机 黑马帝 2011-11-11 19:55:35
地板
能推出来的,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:50
7#
加分啊,回答的够精确了,浪费我看视频的时间了,我是用手机回的帖速度慢,很耗时间的,不给分对不起我浪费的时间哈。加油…
回复 使用道具 举报
本帖最后由 铿锵科技 于 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
没有误导童鞋吧,有错请指正
回复 使用道具 举报
最初刚刚开始的时候,我怎么也弄不明白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里面去了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马