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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 江南小道士 于 2013-11-29 16:45 编辑

在变量一节中,整数数据类型,byte的取值范围为什么是-128~127???
个人理解,byte占一个字节,也就是八个二进制单位。可以表示的最大数可以是1111-1111,也就是2的8次方减1,应该是255才对啊。求扫盲~~~~

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1 淡定

查看全部评分

6 个回复

倒序浏览
已经有朋友解答,解答如下:
这里运用了补码的原理。最高位表示符号位,不参与取值范围计算。0表示正数,1表示负数。
二进制的负数需要取反码进行运算。
例:1111-1111表示的就是一个负数,它对应的十进制数是-1。过程是这样的:先(1111-1111)-(0000-0001)=1111-1110,然后取反:0000-0001,这个数是1111-1111的相反数。0000-0001转换为十进制结果为1,对应的1111-1111就是-1。
对于byte基本数据类型对应十进制的取值范围,
取正数最大:0111-1111,对应十进制为127
          最小:0000-0000,对应十进制为0
取负数最大:1111-1111,对应十进制为-1
          最小:1000-0000,对应十进制为-128


对于byte类型:
二进制负数转换为十进制:-(取反(负数-00000001))
十进制负数转换为二进制:取反(负数绝对值-00000001)
回复 使用道具 举报
之前帖子发错地方了,链接如下:
http://bbs.itheima.com/thread-100677-1-1.html
希望版主能给这朋友加个技术分。。。
回复 使用道具 举报

为什么Java byte 类型的取值范围是-128~127   
概念:负数的补码是该 数 绝 对 值 的 原 码 按 位 取 反 ,然 后 对 整个数 加 1

步骤:

1.确定byte是1个字节,也就是8位

2.最大的应该是0111 1111,因为第一位是符号位,0表示正数

3.最小的应该是1000 0000,同理,表示负数最小的(1111 1111是最大的负数-1)

4.0111 1111即127

5.1000 0000按照最下面的解释为先减一,得到0111 1111,然后按位取反得到1000 0000,该结果为欲求负数的绝对值,所以结果是-128(和概念反着来求出该负数)

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1 赞一个!

查看全部评分

回复 使用道具 举报
江南小道士 发表于 2013-11-29 16:45
之前帖子发错地方了,链接如下:
http://bbs.itheima.com/thread-100677-1-1.html
希望版主能给这朋友加个 ...

那一版不归本版管,没有权限!
回复 使用道具 举报
简★零度 发表于 2013-11-29 17:13
那一版不归本版管,没有权限!

噢,好吧,只能从心里感激那位朋友了。。。
回复 使用道具 举报
简★零度 发表于 2013-11-29 17:13
那一版不归本版管,没有权限!

还有,谢谢版主的技术分
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马