【问题标题】:Range of char in javajava中字符的范围
【发布时间】:2012-07-27 14:11:23
【问题描述】:

以下 Java 代码行产生错误。
即使java中的数据类型是签名的?

    char c = -128;  

【问题讨论】:

标签: java


【解决方案1】:

Char 是一种未在 java 中签名的数据类型。它是一个 16 位无符号整数。

【讨论】:

  • 布尔值是有符号数据类型吗?
  • @JaynathanLeung 请详细说明。是假阴性和真阳性吗?该方案中的零在哪里?
  • 布尔值是 1 位的。 1 或 0,表示真或假。
  • 我看到您已将评论从“是”改为“不是”。
  • 您的意思是 -1 或 0。它是 2 的补码位。但严肃地说,布尔值在 java 中只能是“真”或“假”。它可能在字节码中实现为带符号的 8 位整数,但定义不明确。所以真的不值得操心。
【解决方案2】:

直接来自 Java datatypes. 的 Oracle 教程

charchar 数据类型是单个 16 位 Unicode 字符。它的最小值为 '\u0000'(或 0),最大值为 '\uffff'(或 65,535,含)。

【讨论】:

    【解决方案3】:

    这是因为 -128 是整数。你需要转换为char。请注意 char 是无符号类型,所以在

       char c = (char) -1;
        System.out.print(Integer.valueOf(c).toString());
    

    你会得到 65535

    【讨论】:

      【解决方案4】:

      最小值为'\u0000' (or 0),最大值为'\uffff' (or 65,535 inclusive)

      http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

      【讨论】:

        【解决方案5】:

        根据 Oracle Java doc

        char:char 数据类型是单个 16 位 Unicode 字符。它有 最小值“\u0000”(或 0)和最大值“\uffff”(或 65,535(含)。

        因此,您不能真正为char 分配负值,char c = -128 将导致错误。
        当您尝试为 char 分配负值并对其进行类型转换时,它将将该值旋转到另一个(最大)端。

        char c;
        c = (char) 65;    // 'A'
        c = (char) -100;  // 'ワ' and it results in 65,535(inclusive) - 100 = (char) 65,436
        c = (char) 65436; // 'ワ'
        
        int i;
        i = (char) 65;    // 65
        i = (char) -1;    // 65535 : notice how the char value cycles through the other end
        i = (char) -100;  // 65436 : same as (char) -100. Here, int returns 65,436.
        

        【讨论】:

          【解决方案6】:

          投射它:

          char c = (char) -128;  
          

          虽然这可能不会像你预期的那样表现。也许一个字节会更好?

          【讨论】:

            【解决方案7】:

            如果您对基元的最小值或最大值感到困惑,请找到它们的等效对象并查找 MIN_VALUE 或 MAX_VALUE 常量。例如:

            http://docs.oracle.com/javase/6/docs/api/java/lang/Character.html#MIN_VALUE

            【讨论】:

              【解决方案8】:

              char 保存 16 位无符号值。我们可以将整数分配给 char,但正数最多为 2 的 16 次方,即 65536-1,因为我们从 0 开始。

              如果我们需要分配 -ve 值,一些位将是松散的,我们需要进行类型转换。在这种情况下,编译器会将符号位与实际值一起存储,最后一位将被丢弃。 char c=(char) -128 不会给出编译错误但你会得到荒谬的结果

              【讨论】:

                【解决方案9】:

                您也可以使用Character.isValidCodePoint(int codePoint)方法检查int值是否作为字符代码有效:

                boolean isValid = Character.isValidCodePoint(-128); // false
                
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-08-21
                  • 2012-12-26
                  • 2011-10-23
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多