小编典典

多播期间的行为更改

java

以下是一个简单的声明

System.out.println((int)(char)(byte)-1);
  1. 当我运行它时输出为65535。我不知道原因。
  2. 在执行期间(字节)-1返回-1,因此(int)(char)(byte)-1等价于(int)(char)-1。当我打印(char)-1时,它? 在某些系统中打印,而不在所有系统中打印。
  3. 如果我忽略上述第二点并打印(int)’?’ 然后打印63

所以我的问题是,如果我一起进行多播,(int)(char)(byte)-1那我得到了,65535但是如果我分部进行了广播,那

  • (字节)-1
  • (字符)-1
  • (int)’?’

然后我得到63,为什么呢?


阅读 217

收藏
2020-11-30

共1个答案

小编典典

对于1):

首先,您有一个整数(32位)的二进制表示形式-1是:

1111 1111 1111 1111 1111 1111 1111 1111

然后,将其转换为一个字节(8位):

1111 1111

如果打印出来,将得到-1(即-1的byte表示形式),然后将其转换为一个char(16位无符号字符),这将为您提供:

1111 1111 1111 1111

(因为它会“扩展”符号),如果您尝试将其打印为字符,则会得到“无法识别”的字符(在某些系统中,它将打印问号),然后将其强制转换为int; 但是,a
char是无符号的,因此该符号有一个展开式(因为没有符号),因此您最终拥有:

0000 0000 0000 0000 1111 1111 1111 1111

十进制等于65535

对于2):

不,(int)(char)(byte)-1不等同于(int)(char)-1(请参阅#1的说明)

2020-11-30