Java显式类型转换:int转byte得-121的内部计算规则问询
Java int转byte的类型转换规则解析
示例代码
class Test { public static void main(String[] args) { int i = 135; byte b = (byte)i; System.out.println(b); } }
输出:-121
转换规则说明
Java中把int(32位有符号整数)强制转换为byte(8位有符号整数)属于窄化原始类型转换,核心规则是:
- 直接截取
int值的低8位二进制位,丢弃高位的24位 - 将这8位二进制当作
byte的补码来解析(Java所有整数类型都以补码形式存储)
具体计算步骤
- 把int值135转换成32位二进制:
00000000 00000000 00000000 10000111 - 截取低8位,得到byte的补码:
10000111 - 解析补码:
- 最高位是1,说明是负数,需将补码转成原码:
- 补码减1得到反码:
10000111 - 1 = 10000110 - 反码除符号位外取反得到原码:
11111001
- 补码减1得到反码:
- 原码
11111001对应的十进制就是-121
- 最高位是1,说明是负数,需将补码转成原码:
内容的提问来源于stack exchange,提问作者Rakibul Islam
相关产品推荐
相关产品推荐

