黑马程序员技术交流社区

标题: 关于整数变量中byte类型的取值范围~~ [打印本页]

作者: 江南小道士    时间: 2013-11-29 16:43
标题: 关于整数变量中byte类型的取值范围~~
本帖最后由 江南小道士 于 2013-11-29 16:45 编辑

在变量一节中,整数数据类型,byte的取值范围为什么是-128~127???
个人理解,byte占一个字节,也就是八个二进制单位。可以表示的最大数可以是1111-1111,也就是2的8次方减1,应该是255才对啊。求扫盲~~~~
作者: 江南小道士    时间: 2013-11-29 16:44
已经有朋友解答,解答如下:
这里运用了补码的原理。最高位表示符号位,不参与取值范围计算。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)

作者: 江南小道士    时间: 2013-11-29 16:45
之前帖子发错地方了,链接如下:
http://bbs.itheima.com/thread-100677-1-1.html
希望版主能给这朋友加个技术分。。。
作者: 不抛弃不放弃    时间: 2013-11-29 16:51

为什么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(和概念反着来求出该负数)


作者: 简★零度    时间: 2013-11-29 17:13
江南小道士 发表于 2013-11-29 16:45
之前帖子发错地方了,链接如下:
http://bbs.itheima.com/thread-100677-1-1.html
希望版主能给这朋友加个 ...

那一版不归本版管,没有权限!
作者: 江南小道士    时间: 2013-11-29 17:21
简★零度 发表于 2013-11-29 17:13
那一版不归本版管,没有权限!

噢,好吧,只能从心里感激那位朋友了。。。
作者: 江南小道士    时间: 2013-11-29 17:22
简★零度 发表于 2013-11-29 17:13
那一版不归本版管,没有权限!

还有,谢谢版主的技术分




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