我读到虽然类型字节占用8位内存,而类型char占用16位内存,但从字节到字符的转换被认为是缩小的,因为字节是有符号的,而char是无符号的。我认为这意味着当我们将带有负值的类型字节转换为char时,我们会丢失负数,因此我们会丢失信息,因此转换正在缩小。
我试图在Java程序中测试它。
public class Test
{
public static void main (String[] args)
{
byte num = -1;
char test = (char)num;
System.out.println(test);
}
}
我预计打印测试会输出:
1
这将是-1而没有负号,因为char是无符号的。这实际上是输出:
?
我的程序或我将字节转换为char的想法是否有问题?
答案 0 :(得分:0)
这不是标志或char
如何运作。
System.out.println
会显示char
的 UTF-8字符(与前8位值的ascii相同)。因此System.out.println((char)71);
将打印“G”。因此,当您希望打印“1”时,您所说的是您期望(char)-1 == 41
。如果您想要数字值,则应在打印前将其强制转换为int
。System.out.println
将substitute a question mark代表不可打印的字符。byte
至char
首先转换为int
。 doc(由Sotirios Delimanolis联系)说; 首先,通过扩展原语转换(第5.1.2节)将字节转换为int,然后通过缩小基元转换(第5.1.3节)将结果int转换为char。
其中
有符号整数到整数类型T的缩小转换只会丢弃除n个最低位之外的所有位,其中n是用于表示类型T的位数