byte类型取值范围以及溢出详解
来源:互联网 发布:linux查看swap大小 编辑:程序博客网 时间:2024/05/16 03:12
例1:
public class test {public static void main(String[] args) {byte a = 127 ;a = (byte)(a+3) ;System.out.println(a);}}
输出-126,为什么呢
byte类型的取值范围是-128-127
这个输出结果是由java编码方式决定的,Java中正数用原码表示,负数用补码表示,第一位是符号位。
对于127他的编码是:
0000 0000 0000 0000 0000 0000 0111 1111
加上3也就是130,他的编码是:
0000 0000 0000 0000 0000 0000 1000 0010
使用强制转型后,a的编码就变成:
1000 0010
因为java第一位为1的为负数,负数用补码表示,所以要显示原码,要取反加1:
这样就变成 0111 1110
这样就是126加上符号,结果就是-126
例2:
public class test {public static void main(String[] args) {short a = 128 ;byte b = (byte)a ;System.out.println(b);}}输出-128,为什么呢
同上:
a的编码是:
0000 0000 1000 0000
强制转型后变为1000 0000
因为java第一位为1的为负数,负数用补码表示,所以要显示原码,要取反加1:
还是1000 0000
这样就是128加上符号,结果就是-128
例3:
public class test {public static void main(String[] args) {byte a = (byte)(-129) ;System.out.println(a);}}输出127,为什么呢
同上:
a的补码是:
1000 0000 0000 0000 0000 0000 1000 0001
a的原码是:
0111 1111 1111 1111 1111 1111 0111 1111
强制转换,取后面8个字节,也就是
0111 1111
所以结果是127
0 0
- byte类型取值范围以及溢出详解
- byte类型数据的取值范围及溢出后的强制转换及在内存中的存储结果
- java基本类型byte的取值范围
- java基本类型byte的取值范围
- Java byte 类型的取值范围是-128~127
- java学习总结(16.05.17)对数据类型取值范围和数据溢出的理解(以byte类型为例)
- JAVA byte取值范围表达理解
- 为什么Java byte 类型的取值范围是-128~127
- 为什么java中Byte类型的取值范围是-128~127
- 为什么Java中byte类型的取值范围是-128~127
- 为什么Java byte 类型的取值范围是-128~127
- 为什么Java byte 类型的取值范围是-128~127
- java中的byte类型的取值范围是-128~127
- 为什么Java byte 类型的取值范围是-128~127
- java中byte、short、int、long、float、double类型的取值范围
- 为什么Java byte 类型的取值范围是-128~127
- 为什么Java byte 类型的取值范围是-128~127
- 为什么Java byte 类型的取值范围是-128~127
- [lua] lua 函数 upvalue 数量限制
- Java 源码解析之 ArrayList
- java.util.NoSuchElementException
- 教你怎么看一个网站是否存在漏洞!
- ArcSDE for Oracle在大数据量执行创建统计信息(Analyze)耗时长的问题
- byte类型取值范围以及溢出详解
- LeetCode | Copy List with Random Pointer(赋值带有随机指针的链表)
- Java Set集合之Treeset
- OGEngine:Java开发者的手游开发引擎
- CodeForces 383C
- 自比毕加索,揭秘神秘的“苹果大学”
- java.util.vector中的vector的详细用法
- 斐波拉切字符串统计个数 Fibonacci String
- Use Archive Utility preferences for control over archives