关于整型的表示方法和范围问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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