java中基本数据类型byte的溢出问题

HuoHua_2020      2022-05-10     458

关键词:

Java中基本数据类型byte的溢出问题

问题源于:[Day2](file:///F:/github/JavaFile/JavaBasic/JavaSEBasic/Day2.md)

定义两个byte类型的数据,将其之和赋值给一个新的byte类型数据

byte b1 = 1;
byte b2 = 2;
byte b = (byte)(b1+b2);
System.out.println(b);

此时结果为3,与预期一致

byte类型的数据范围为-127~128,猜想,若此时将上述代码改成

byte b1 = 67;
byte b2 = 89;
byte b = (byte)(b1+b2);
System.out.println(b);

此时编译器会不会报错?
进入cmd执行命令

3ReF8H.png

结果是-100?!

上面提到byte类型的取值范围是-128~127
这个输出结果是由java编码方式决定的,Java中正数用原码表示,负数用补码表示,第一位是符号位,正数和0用0标记,负数用1标记。

byte类型的数据占用1字节,即8位,但是在进行相加运算时,系统会自动转换为int类型(4字节)进行运算

int型整数67的二进制为 0000 0000 0000 0000 0000 0100 0011‬
int型整数89的二进制为 0000 0000 0000 0000 0000 0101 1001‬‬
相加后,得到的int型整数156的二进制为 0000 0000 0000 0000 0000 1001 1100‬
在经过强制类型转换(byte)后,其结果为 1001 1100

编码的最高位为1,所以编译器认为这是一个负数
而上述提到,负数用补码表示,需要转换为原码,故取反加1
取反 0110 0011
加1 0110 0100
也就是100,因为是负数所以添上符号,结果为-100。

参考资料:

byte类型取值范围以及溢出详解|CSDN
https://blog.csdn.net/benjamin_whx/article/details/38704077

(java基本数据类型)

java中提供了8中基本数据类型(六种数字类型、一个字符类型、一个布尔类型){byte:byte数据类型是8位、有符号的,以二进制补码表示的整数;最小值是-128(-2^7);最大值是127(2^7-1);默认值是0;byte类型用在大型数组中节约... 查看详情

java基本数据类型

1、内置数据类型Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。byte:byte数据类型是8位、有符号的,以二进制补码表示的整数;最小值是 -128(-2^7);最大值是&n... 查看详情

java基本类型与引用类型

目录java基本类型与引用类型目录一基本数据类型二引用类型三基本类型与引用类型的区别默认值内存分配自动装箱自动拆箱自动装箱拆箱带来的问题程序的性能空指针异常对象相等比较时一、基本数据类型java中一共分为8种基本... 查看详情

java中各种数据类型转换byte[]的方法

...ch(Exceptione)以上是把integer类型转化成byte[]数组类型。注:基本类型要转化为byte[]数组的话,需要用该基本类型的 查看详情

java基本数据类型

...int,然后所有变量转成它们中级别最高的类型进行计算。基本数据类型和引用类型基本数据类型:byte1,short2 ,int 4,long 8,char 2(等价于无符号整型),float 4, double8.boolean整数默认int类型longl=99999999 查看详情

java中byte和byte的区别?

byte是基本类型,Byte是对象类型,是JDK里面的一个类!自动的加解包是1.5的新特性使用场合,例如说往ArrayList里面add,必须add的是Object而byte不是对象,就只能把Byte添加进去参考技术A在java中有基本类型和复杂类型之分,byte是基... 查看详情

java中equals和==

1)对于==运算符    如果作用于基本数据类型的变量,则直接比较其存储的“值”是否相等;    如果作用于引用类型的变量,则比较的是所指向的对象的地址   在Java中游8种基本数据类型:  浮点型:floa... 查看详情

java中基本数据类型的默认值(初始值)

数据类型默认值byte0short0int0long0float0.0double0.0StringnullbooleanfalsepublicclassbdtdValues{publicstaticvoidmain(String[]args){Variablev=newVariable();System.out.println("byte类型的初始值为"+v.byteNum) 查看详情

java的基本数据类型

Java的基本数据类型想要学习资料的可以私聊联系我,大家一起交流学习!Java的两大数据类型:?内置数据类型?引用数据类型内置数据类型Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,... 查看详情

java的基本数据类型

Java的基本数据类型想要学习资料的可以私聊联系我,大家一起交流学习!Java的两大数据类型:?内置数据类型?引用数据类型内置数据类型Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,... 查看详情

java的基本数据类型

基本数据类型1.整数类型(byte,short,int,long)2.浮点数类型(float,double)3.字符类型(char)4.布尔类型(boolean) 整数类型 --byte使用byte关键字来定义byte型变量例如: bytea=1;byteb=2,c=3; 整数型中分配空间最少,只有1个字节取值范围... 查看详情

java的基本数据类型

1)四种整数类型(byte、short、int、long):  byte:8位,用于表示最小数据单位,如文件中数据,-128~127  short:16位,很少用,-32768~32767  int:32位、最常用,-2^31-1~2^31 (21亿)  long:64位、次常用 ... 查看详情

java变量类型?

...但不会报语法错误。2a=(short)a+3会报编译错误Java语法中数据常量默认类型为int,所以3是int类型的整数类型常量。(short)a+3(int)的类型为int,将int类型(64位)的303赋值给short类型(32位)的a,在编译时报错所以a=(short)a+3系统编... 查看详情

java中引用数据类型和基本数据类型的区别

...位高人帮下忙‘小弟先谢了参考技术Ajava中数绝类型分为基本数据类型,和引用数据类型基本数据就是:int,float,boolean等等,8种引用数据类型包括:类,数组,接口本就没有太多的关系!参考资料:http://zhidao.baidu.com/question/54231579.html?si=5 ... 查看详情

java基本数据类型

Java基本数据类型在Java中共有八种基本数据类型如下表类型所占字节char2boolean4(1)byte1short2int4long8float4double8可以把八种数据类型按照字符型、布尔型、数值型分为三组字符型char类型所占的字节数为2个字节,通过如下代码可以查看S... 查看详情

java程序内存溢出一般啥原因

...图可能会更清晰:局部变量表存放了预编译期可知的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用(reference类型)和returnAddress类型(指向了一条字节码指令的地址)。其中64位长度的long和double类... 查看详情

java基础语法|·数据类型

...变量都必须先定义后才能使用Java的数据类型分为两大类基本类型引用类型什么是字节?位(bit):是计算机内部数据储存的最小单位,11001100是一个八位二进制数。字节(byte):是计算机中数据处理的基本单位,习惯上用大写B... 查看详情

java基本数据类型

基本数据类型JAVA中一共有八种基本数据类型,他们分别是 byte、short、int、long、float、double、char、boolean 类型型别字节取值范围byte整型1byte-27~27-1short整型2byte-215 ~215-1int整型4byte-231 ~231-1long整型8byte-263 ~263-1float 查看详情