java 基础问题 关于byte

able_7 2010-01-07 05:16:58
byte的取值范围只能是:-128 -- 127了 即 负的2的7次方到2的7次方减去1。

为什么 byte 的最大值 2的7次方减去1。

希望大家 能讲解通俗易懂点 谢谢
...全文
202 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
bjtopcomm 2010-06-24
  • 打赏
  • 举报
回复
1000 0000 是 -1吗?
还是1000 0001 为-1?
老兵-516 2010-06-24
  • 打赏
  • 举报
回复
1000 0001 是-1 的原码;
1111 1111 是-1 的补码;
byte数据占一个字节即8位,正数使用原码表示,负数则使用补码表示。
所以在byte数据中就是 1111 1111 了。是这样吧?
humman7 2010-01-08
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sunnylyy 的回复:]
引用 8 楼 yinghan2005 的回复:
引用 5 楼 xiezhifu 的回复:
byte数据占一个字节,一个字节有8位,因此byte的最大值使用二进制表示是01111111,最左边的0为符号位,0表示正数,1表示负数,所以最小值为11111111,把它们转换成十进制就分别是127和-128了

别的人不要乱讲,此乃正解


不要误导人,二进制11111111 = -1
[/Quote]
说的好,我愧对搂主给的一分呀
wenjjing2lianee 2010-01-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 bayougeng 的回复:]
负值:128个
正值:127个
非负非正0:1个
加起来正好是256个。
0把正数的那个名额吃掉了。
[/Quote]

...
xiezhifu 2010-01-07
  • 打赏
  • 举报
回复
楼主这个问题如果真的想弄明白的话,最好自己去查找计算机中数的表示相关的定义标准。我们说的都是看教科书来的知识,不一定说得很准确明了的。其实我自己也不是很明白为什么要这样表示,搞得人人头痛
xiezhifu 2010-01-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xiezhifu 的回复:]
byte数据占一个字节,一个字节有8位,因此byte的最大值使用二进制表示是01111111,最左边的0为符号位,0表示正数,1表示负数,所以最小值为11111111,把它们转换成十进制就分别是127和-128了
[/Quote]
谢谢10、11楼纠正,刚才急着去吃饭,我没有检查就贴出去了。
11111111是-1的补码
10000000是-128的补码
总结:byte数据占一个字节即8位,正数使用原码表示,负数则使用补码表示。因此byte数据表示范围为-128~127
补码的计算方法:正数的补码与原码一样,负数的补码为原码(不包括符号位)取反加1
zhaining522 2010-01-07
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 johnson_hong 的回复:]
引用 8 楼 yinghan2005 的回复:
引用 5 楼 xiezhifu 的回复:
byte数据占一个字节,一个字节有8位,因此byte的最大值使用二进制表示是01111111,最左边的0为符号位,0表示正数,1表示负数,所以最小值为11111111,把它们转换成十进制就分别是127和-128了

别的人不要乱讲,此乃正解


11111111很明显是-1,
10000000才是-128。。。。。。
[/Quote]
顶哦
10000000 的补码是取反加1后还是 10000000
这个又点特殊
hongjn 2010-01-07
  • 打赏
  • 举报
回复
这个
[Quote=引用 2 楼 sunnylyy 的回复:]
byte 8位: 最大值的二进制形式0111111 = 127, 最小值的二进制形式10000000 = -128
[/Quote]
零起跑线 2010-01-07
  • 打赏
  • 举报
回复
对,应该去看看补码方面的知识
[Quote=引用 4 楼 dazzlingwinter 的回复:]
一个byte是8位的,最前一个是符号位,最大也只能是0111 1111也就是+127
如果127+1变成1000 000这个时候第第一位为1,要取其补码,前面加符号,就是-128,看看计算机的补码怎么表示就知道了
[/Quote]
Johnson_Hong 2010-01-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 yinghan2005 的回复:]
引用 5 楼 xiezhifu 的回复:
byte数据占一个字节,一个字节有8位,因此byte的最大值使用二进制表示是01111111,最左边的0为符号位,0表示正数,1表示负数,所以最小值为11111111,把它们转换成十进制就分别是127和-128了

别的人不要乱讲,此乃正解
[/Quote]

11111111很明显是-1,
10000000才是-128。。。。。。
sunnylyy 2010-01-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 yinghan2005 的回复:]
引用 5 楼 xiezhifu 的回复:
byte数据占一个字节,一个字节有8位,因此byte的最大值使用二进制表示是01111111,最左边的0为符号位,0表示正数,1表示负数,所以最小值为11111111,把它们转换成十进制就分别是127和-128了

别的人不要乱讲,此乃正解
[/Quote]

不要误导人,二进制11111111 = -1
Johnson_Hong 2010-01-07
  • 打赏
  • 举报
回复
一个字节有8位,所以byte的范围是00000000---11111111
有很多语言byte是无符号的,因此范围就是0-255

java中byte是有符号表示的,所以00000000--01111111对应在 0~127
10000000-11111111对应在-128~-1
humman7 2010-01-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xiezhifu 的回复:]
byte数据占一个字节,一个字节有8位,因此byte的最大值使用二进制表示是01111111,最左边的0为符号位,0表示正数,1表示负数,所以最小值为11111111,把它们转换成十进制就分别是127和-128了
[/Quote]
别的人不要乱讲,此乃正解
bayougeng 2010-01-07
  • 打赏
  • 举报
回复
负值:128个
正值:127个
非负非正0:1个
加起来正好是256个。
0把正数的那个名额吃掉了。
树成 2010-01-07
  • 打赏
  • 举报
回复
嗯,关于这个问题,楼主必须学习计算机的基础。
楼主必须知道计算机是如何存储数据的,数据在硬盘中的表现形式,了解位,字节,字,宽字等概念,如果更深入还要了解处理器运作机制,寄存器寻址方式,内存存储方式,以及数据的表现形式,如二进制表现形式、八进制表现形式、十进制表现形式、十六进制表现形式以及六十四进制表现形式。
xiezhifu 2010-01-07
  • 打赏
  • 举报
回复
byte数据占一个字节,一个字节有8位,因此byte的最大值使用二进制表示是01111111,最左边的0为符号位,0表示正数,1表示负数,所以最小值为11111111,把它们转换成十进制就分别是127和-128了
Dazzlingwinter 2010-01-07
  • 打赏
  • 举报
回复
一个byte是8位的,最前一个是符号位,最大也只能是0111 1111也就是+127
如果127+1变成1000 000这个时候第第一位为1,要取其补码,前面加符号,就是-128,看看计算机的补码怎么表示就知道了
amdgaming 2010-01-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dollyn 的回复:]
这个要从很基础的地方讲起了...
科班出身的应该都学过计算机原理,好明白。没学过的一两句话恐怕说不清楚。
[/Quote]
咔咔 是的,楼主 找书 看去 。。。
sunnylyy 2010-01-07
  • 打赏
  • 举报
回复
byte 8位: 最大值的二进制形式0111111 = 127, 最小值的二进制形式10000000 = -128
霜之哀伤 2010-01-07
  • 打赏
  • 举报
回复
这个要从很基础的地方讲起了...
科班出身的应该都学过计算机原理,好明白。没学过的一两句话恐怕说不清楚。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧