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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kenhe 中级黑马   /  2014-11-28 10:26  /  1804 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Java中byte取值范围是-128-127
-128的表现形式是1000 0000 这个第一位不是符号位吗?怎么能代表-128?

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 淡定

查看全部评分

8 个回复

倒序浏览
本帖最后由 kerner 于 2014-11-28 10:32 编辑

-128原码  1000 0000(因为最高位是符号位,不能改变,第8位1被舍弃)
-128反码  1111  1111
-128补码  1111 1111 + 1 = 1000 0000 (因为最高位是符号位,不能改变,所以只有后面7位和1相加,导致溢出了,第8位被舍弃)
回复 使用道具 举报
byte类型,占八个二进制,其中最高位表示符号:1表示负数,0表示正数。
-128 的二进制表现形式是对应整数 128的二进制取反再 +1
但是byte 类型正数最大值只能取到127
那么这里可以拿127 举例:
-127的二进制表现形式,是其对应正数127的二进制表现形式 0111-1111 ,取反1000-0000 再加1 ;
但是,如果127取反之后,不加1,那么127取反的结果是不是就是-128啦?
所以, -128的二进制表现形式就是 1000-0000


补充:byte类型取值范围:-128~127
对应二进制表现形式:
-128: 1000-0000    -127: 1000-0001    -126: 1000-0010 。。。。。。 -1: 1111-1111
128:超出范围          127: 0111-1111    126: 0111-1110 。。。。。。 1: 0000-0001

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
也可以反过来想:
在8个格子中分别放入0和1,但是首位必须是1,也就剩下7个格子,可以放入0或者1,一共可以有多少种组合?答案是2^7=128
其中,1000-0001 到 1111-1111 之间一共有127种1和0的不同组合,分别代表 -127 到 -1 ;
还有一个1000-0000,就代表-128了。
回复 使用道具 举报
学习了。。。。
回复 使用道具 举报
学习了。。。。
回复 使用道具 举报
学习了,,,
回复 使用道具 举报
陈宁 来自手机 中级黑马 2014-11-29 18:33:23
8#
byte类型数在计算机中的表现形式是二进制的八位数,而byte的范围为-2^8到2^8-1,最大值为0111 1111,最小值为1000 0000.最高位为1和0分别表示负数和正数。如果用int类型表示byte的最大值,在计算机中为0000 0000 0000 0000 0000 0000 0111 1111。当你打印输出的时候系统会把前面的符号位省略,所以同一个数,无论byte.short.int.long类型,打印输出时都是一样的。但是在计算机内部表示不一样。
回复 使用道具 举报
陈宁 来自手机 中级黑马 2014-11-29 18:34:49
9#
最后一句话,补充一下,是在不溢出的情况下。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马