当我试图做
时char c = (char)-1;
我收到编译错误,指出Constant值' -1'不能转换成“char”字样。
这让我觉得这是一个无效的转换。但是当我在运行时执行此操作时,我会回到角色'\uffff'
。
出于好奇,这个角色是什么以及为什么编译器不喜欢它?
答案 0 :(得分:4)
C#使用Unicode UTF-16对字符串和字符进行编码。 UTF-16中的ffff
是“非字符”。当您使用\u
为字符串作为前缀时,它会告诉C#将以下字符视为Unicode代码点。所以在这里,您的代码点是十六进制的ffff
或十进制的65535
。 C#中的char
在引擎盖下表示为ushort
,并且两者之间存在隐式转换。此处-1
超出了ushort
的范围,溢出到ushort.MaxValue
65535
。 (默认情况下,C#中的整数运算不会在溢出时抛出异常。要启用此行为,请使用checked
块。)