原话如此:
要观察一个字符在unicode表中的顺序位置,必须使用int类型显式转换,如(int)'a'。不可以使用short型转换,因为char的最高位不是符号位。我不解在于。char是2个字节,short也是2个字节,同样一个字符c使用char或short自然都是可以,为什么会出现上述符号位的问题。谁能解释清楚呢?

解决方案 »

  1.   

    这个在java中应该是没有什么区别的阿。你可以试验一下。两个转化了的结果应该是相同的。
      

  2.   

    也没发现哪个字符的asscii是负数的阿。应该和符号没太大关系吧。
      

  3.   

    我也不知道确切的答案,不过猜测书上说的是unicode字符集,包括的字符比较多,某些字符的确转换成二进制就是以1开始的,而1当作符号位的时候就是负号的意思,比如一个字符编码是10001001,如果用int转换结果就是137,但是用short会把第一个1当做负号即,结果是-9,这样的话,本来应该编号很大的字符反而成了比0小,就会出错。我是这么理解的,不知道对不对。
      

  4.   

    我猜测:
    short的最高位是存储正负号的,如果把char强制转换为short,会丢失数据
      

  5.   

    答:不。没有任何数据丢失。内存中的二进制形式的数据都是一样的。只是解释时,按char解释就成了字符,按short解释就成了一个数值而已(而且可能还是一个负的呢,但没有关系啊,内存中的二进制都是一样的啊)。