我是Java的初学者。经过长时间的尝试,我无法理解这条线。
byte num =(byte)135;
这一行给出结果-121为什么它是带符号的数字?
任何人都可以详细说明吗?
答案 0 :(得分:8)
在Java中,byte
始终是已签名的,并且它们位于-128
到127
的范围内。当int
文字135
下传到byte
时,结果为负数,因为第8位已设置。
1000 0111
具体而言,JLS, Section 5.1.3,陈述:
有符号整数到整数类型T的缩小转换只会丢弃除n个最低位之外的所有位,其中n是用于表示类型T的位数。除了可能丢失有关幅度的信息之外数值,这可能导致结果值的符号与输入值的符号不同。
当您将int
这样的135
字面值转换为byte
时,这是一种缩小的原始转换。