【问题标题】:Narrowing conversion from byte to char Java [duplicate]缩小从字节到字符Java的转换[重复]
【发布时间】:2017-01-22 21:21:45
【问题描述】:

我读到虽然 byte 类型占用 8 位内存,char 类型占用 16 位内存,但从 byte 到 char 的转换被认为是缩小了,因为 byte 是有符号的,而 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 是无符号的。这实际上输出:

?

我的程序或将字节转换为字符的想法有问题吗?

【问题讨论】:

标签: java


【解决方案1】:

标志或char 不是这样工作的。

  1. 请记住,System.out.println 将向您显示 charUTF-8 字符(与值的前 8 位的 ascii 相同)。所以System.out.println((char)71); 将打印“G”。因此,当您希望看到“1”被打印时,您的意思是您希望看到(char)-1 == 41。如果需要数值,应在打印前将其转换为 int
  2. System.out.printlnsubstitute a question mark 用于不可打印的字符。
  3. bytechar 首先转换为 intdoc(由 Sotirios Delimanolis 链接)说;

首先,通过加宽基元转换(第 5.1.2 节)将字节转换为 int,然后通过缩小基元转换(第 5.1.3 节)将生成的 int 转换为 char。

在哪里

有符号整数到整数类型 T 的窄化转换只会丢弃除 n 个最低位之外的所有位,其中 n 是用于表示类型 T 的位数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 2012-11-22
    • 1970-01-01
    相关资源
    最近更新 更多