int num1=129;
byte num2=(byte)num1;
System.out.println(num2);
//打印出:-127
int num1=128;
byte num2=(byte)num1;
System.out.println(num2);
//打印出:-128
int num1=256;
byte num2=(byte)num1;
System.out.println(num2);
//打印出:0
int num1=257;
byte num2=(byte)num1;
System.out.println(num2);
//打印出:1急等
byte num2=(byte)num1;
System.out.println(num2);
//打印出:-127
int num1=128;
byte num2=(byte)num1;
System.out.println(num2);
//打印出:-128
int num1=256;
byte num2=(byte)num1;
System.out.println(num2);
//打印出:0
int num1=257;
byte num2=(byte)num1;
System.out.println(num2);
//打印出:1急等
你那样转化越界了
比如:int num1=129;那么转化后为-127其他情况也是和256有关系,倍数关系的加减
越界.
int 4字节:00000000,00000000,00000000,10000001 (读为:129)
byte 1字节:10000001 (读为:-127)
均为补码形式读出.
system.out.println(b) : -106int in = b & 0x000000ff;
system.out.println(in): 150这样in就显示为正数了,原因是对byte进行int提升后为0xffffff96,取其最低字节为byte的绝对值。
第二点,机器数的存放是用补码,有了这两条,就可以来分析楼主说的题了
129:00000000 00000000 00000000 10000001(整数的补码就是其本身)
转换成byte:10000001
注意首位变成1,说明这是个负数!对100000001减1去反加负号(补码-原码),得-01111111,即-127 128: 00000000 00000000 00000001 10000000
byte:10000000
减一取反加负号:-10000000,即-128 256: 00000000 00000000 00000001 00000000
byte:00000000 即0 257: 00000000 00000000 00000001 00000001
byte:00000001 即1 够详细了吧,名牌大学软件学院的高才生理论果然是扎实啊,哈哈!
----------------------------------------------------------------
呵呵,你到是够臭屁的,不过分析确实比较详细。
解释的够清楚了,无话可说
说得很清楚了,基础扎实,赞一个!