Java:简述Java中int和byte类型类型之间的转换

Java:简述Java中int类型和byte类型之间的转换


提示:计算机中数据都是通过补码存储的,对于正数的表示就是二进制原码(因为正数的反码和补码都是原码),对于负数的表示用补码(负数的反码为原码符号位外其他位取反,负数的补码为原码的反码加一)。

大家可以计算下如下代码的输出结果是什么?

/* -128~127范围内的换算*/
byte n1=-128;
System.out.println("-128的int->byte:"+n1);	
byte n2=127;
System.out.println(" 127的int->byte:"+n2);
		
/* 小于-128范围内的换算*/
byte n3=(byte) -129;
System.out.println("-129的int->byte:"+n3);	
byte n4=(byte) -130;
System.out.println("-130的int->byte:"+n4);

/* 大于127范围内的换算*/
byte n5=(byte) 128;
System.out.println(" 128的int->byte:"+n5);
byte n6=(byte) 129;
System.out.println(" 129的int->byte:"+n6);
byte n7=(byte) 130;
System.out.println(" 130的int->byte:"+n7);

实际的输出结果为:

-128的int->byte:-128
 127的int->byte:127
 
-129的int->byte:127
-130的int->byte:126

 128的int->byte:-128
 129的int->byte:-127
 130的int->byte:-126

int类型的m转换为byte的规则为:对m的补码,截取后8位,并对截取后的二进制数进行求补码操作。

【-128】
原码为:1000 0000 0000 0000 0000 0000 1000 0000
反码为:1111 1111 1111 1111 1111 1111 0111 1111
补码为:1111 1111 1111 1111 1111 1111 1000 0000
截取后8位为:1000 0000,,负数的补码为原码的反码加1
反码为:1111 1111
补码为:1000 0000,即-128
【127】
原码为:0000 0000 0000 0000 0000 0000 0111 1111
截取后8位为:0111 1111
补码为:0111 1111,正数的补码为本身,即127

【-129】
原码为:1000 0000 0000 0000 0000 0000 1000 0001
反码为:1111 1111 1111 1111 1111 1111 0111 1110
补码为:1111 1111 1111 1111 1111 1111 0111 1111
截取后8位为:0111 1111,正数的补码为本身,即127
【-130】
原码为:1000 0000 0000 0000 0000 0000 1000 0010
反码为:1111 1111 1111 1111 1111 1111 0111 1101
补码为:1111 1111 1111 1111 1111 1111 0111 1110
截取后8位为:0111 1110,正数的补码为本身,即126

【128】
原码为:0000 0000 0000 0000 0000 0000 1000 0000
截取后8位为:1000 0000,负数的补码为原码的反码加1
反码为:1111 1111
补码为:1000 0000,即-128
【129】
原码为:0000 0000 0000 0000 0000 0000 1000 0001
截取后8位为:1000 0001,负数的补码为原码的反码加1
反码为:1111 1110
补码为:1111 1111,即-127
【130】
原码为:0000 0000 0000 0000 0000 0000 1000 0010
截取后8位为:1000 0010,负数的补码为原码的反码加1
反码为:1111 1101
补码为:1111 1110,即-126
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页