它怎么能打印“?”在Java中,当我尝试打印字符时(1)
我最近在读Java谜题,在问题6中,它提到了基本数据类型的转换。 然后我想尝试将(-1)转换成字符并打印出来。它应该打印-1的ascii码,对吗?但是没有一个字符的ascii是-1,有人告诉我应该是255。实际上它输出了“?”,有人能给我一个理由吗
谢谢大家,感恩节谢谢大家
你可以在下面搜索框中键入要查询的问题!
我最近在读Java谜题,在问题6中,它提到了基本数据类型的转换。 然后我想尝试将(-1)转换成字符并打印出来。它应该打印-1的ascii码,对吗?但是没有一个字符的ascii是-1,有人告诉我应该是255。实际上它输出了“?”,有人能给我一个理由吗
谢谢大家,感恩节谢谢大家
# 1 楼答案
在字符中放入-1将使其溢出到0xFFFF(因为它是一个unsigned 16 bit value)0xFFFF is a non-character,因此
?
如果溢出产生的字符不是非字符,它将显示为罚款:
同样的原则,只是这一次我们溢出到了一个值,该值实际上附加了一个已定义的字符(36,美元符号)请注意,这并没有实际应用——您永远不会希望通过将字符设置为负值来故意使其溢出
# 2 楼答案
将
-1
强制转换为char
时,会得到65535
字符,因为char
是一个无符号16位整数。无论何时将较大的整数转换为16位值,都会保留较低的16位。根据定义,这是一个无效字符,因此将始终打印为?
或<?>
顺便说一句
(char) 255
是一个有效字符