黑马程序员技术交流社区

标题: 基本数据类型的取值范围问题 [打印本页]

作者: kenhe    时间: 2014-11-28 10:26
标题: 基本数据类型的取值范围问题
Java中byte取值范围是-128-127
-128的表现形式是1000 0000 这个第一位不是符号位吗?怎么能代表-128?
作者: kerner    时间: 2014-11-28 10:31
本帖最后由 kerner 于 2014-11-28 10:32 编辑

-128原码  1000 0000(因为最高位是符号位,不能改变,第8位1被舍弃)
-128反码  1111  1111
-128补码  1111 1111 + 1 = 1000 0000 (因为最高位是符号位,不能改变,所以只有后面7位和1相加,导致溢出了,第8位被舍弃)
作者: 江南小道士    时间: 2014-11-28 16:17
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
作者: 江南小道士    时间: 2014-11-28 16:26
也可以反过来想:
在8个格子中分别放入0和1,但是首位必须是1,也就剩下7个格子,可以放入0或者1,一共可以有多少种组合?答案是2^7=128
其中,1000-0001 到 1111-1111 之间一共有127种1和0的不同组合,分别代表 -127 到 -1 ;
还有一个1000-0000,就代表-128了。
作者: xingkong123    时间: 2014-11-29 00:10
学习了。。。。
作者: Afridoce    时间: 2014-11-29 10:09
学习了。。。。
作者: 高昌德    时间: 2014-11-29 16:32
学习了,,,
作者: 陈宁    时间: 2014-11-29 18:33
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
最后一句话,补充一下,是在不溢出的情况下。




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