关于整型的表示方法和范围问题

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

关于整型的表示方法和范围问题

Byte:一个字节8位

取值范围:[-128,127]

最大值:127 电脑中表现形式:0111 1111

最小值:-128 电脑中表现形式:1000 0000 (可以当作-0来理解)问题1:为什么baye最小值是-128而不是-127呢?

答:byte占8位,可以表示256个不同数字数字

正数部分:[1,127 ] 负数部分[-1 -,-127]

计算机中只存在一个0,没有正负0之分,那么总共才255个数,还有一个数就是-128,可以把它当作-0来理解。

-128:1000 0000

我们知道,正数在计算机中以原码存在,负数以反码存在,那么原码和反码及补码是什么关系呢?

正数:原码=反码=补码

负数:原码-->反码:按位取反(除符号位以外)

补码=原码取反+1(符号位不变)

原码=补码取反+1(符号位不变)

如-128:1000 0000怎么来的呢?

1000 0000 符号位为1,说明是负数,那么这个负数补码的原码是:1000 0000原码:000 0000取反为111 1111 再加1为:1000 0000 原码为1000 0000的值是为128,那么再加上符号位,就变成了-128。

问题二:int a=(byte)128;为什么a的值是-128?

我们知道,当byte,char,short参与运算时,是以int形式的。那么:128参与运算时表现形式:

强转为byte,byte表示8位,多余位数舍弃:1000 0000=-128

问题三:java中byte类型最大值是127,再加1为什么是-128?答:因为byte 的范围由 -128 到 +127,会滤掉256的倍数

那么:127+1-256= -128

问题四:存在使i + 1 < i的数吗?

方案1:byte越界:-128<127

(byte)127+(byte)1<(byte)127;

方案2:int越界

int a=2<<30-1;

boolean b=a+1

System.out.println(b);

结果为true

笔记:int b=(byte)129 计算时:0000 0000 1000 0001

截取部分:1000 0001为负数补码,此原码为1111 1111=-127

相关文档
最新文档