今天看到一题:short a = 128, byte b = (byte)a,问打印的a,b分别是多少? key:a=128,b=-128

来源:互联网 发布:2017淘宝恶意退款教程 编辑:程序博客网 时间:2024/04/28 17:13

今天看到一题:short a = 128, byte b = (byte)a,问打印的a,b分别是多少?
key:a=128,b=-128

byte类型的数据取值范围是:-128-127,
例如:byte a=(byte)128;
byte b=(byte)(-129);
a和b得值分别为-128和127.
所以对于128和-129,他们的编码分别是:0000 0000 0000 0000 0000 0000 1000 0000和1111 1111 1111 1111 1111 1111 0111 1111。使用强制类型转换之后得到的a和b分别是1000 0000和0111 1111。对于a来说,1000 0000是负数(第一位为1),它的绝对值是1000 0000即128,而对于b来说,0111 1111是正数,值为127。
强制转换的截位本身就带来数据的损失,所以出来的结果比较怪也是正常。
这个是Java编码方式决定的,Java中正数用源码表示,负数用补码表示,第一位是符号位。
原创粉丝点击