Java 强制转换((char)a),其中a是int范围内的任意数字

Java 强制转换((char)a),其中a是int范围内的任意数字,java,character-encoding,casting,ascii,cjk,Java,Character Encoding,Casting,Ascii,Cjk,我知道ASCII码在十进制的0-127和二进制的0000 0000到0111111之间,128-255之间的值是扩展的ASCII码 我还知道int接受9位数字(我错了,int的范围在(-2147483648到2147483647)之间),因此如果我们将(0-Maxintrange)之间的每个数字都转换为char,就会有很多符号;例如: (char)99999999给出짿 这是一个韩国符号(我甚至不知道它是什么意思;谷歌翻译找不到任何意义!) 最小值int范围到0之间的值也会发生同样的情况 那些符

我知道ASCII码在十进制的0-127和二进制的
0000 0000
0111111
之间,128-255之间的值是扩展的ASCII码

我还知道int接受9位数字(我错了,
int
的范围在(-2147483648到2147483647)之间),因此如果我们将(0-Max
int
range)之间的每个数字都转换为
char
,就会有很多符号;例如:

(char)99999999
给出짿 这是一个韩国符号(我甚至不知道它是什么意思;谷歌翻译找不到任何意义!)

最小值
int
范围到0之间的值也会发生同样的情况

那些符号是一个接一个输入的,这是没有意义的

我不明白——他们怎么能把这些大数字分配成自己的特征呢

我不明白他们怎么把这些大数字指定为自己的符号

这些任务由Unicode联盟完成。有关详细信息,请参阅

然而,在你的特殊情况下,你正在做一些完全荒谬的事情。整数99999999的十六进制形式为0x3B9AC9FF。然后将其转换为char,这将丢弃前四个字节,并提供0xC9FF。如果你在Unicode.org上查一下,发现是的,它是一个韩文字符

Unicode代码点实际上可能相当大;有超过一百万个。但你不能仅仅通过施展才能达到目的。要使用UTF-16(就像C#一样)获得超出“正常”范围的Unicode代码点,需要使用两个字符。请参见“代理项对”部分

要解决您问题中的其他一些问题:

我知道ACCII代码在十进制的(0-127)和二进制的(0000 0000到0000 1111)之间

这是ASCII,而不是ACCII,二进制的127是01111111,而不是000011111

我们也知道int接受9位数字,所以如果我们在

int的范围大于该范围

我不知道这意味着什么,即使谷歌翻译也找不到任何意义

韩国人不像中国人,每个字形代表一个单词。那些是信。它们没有意义,除非它们碰巧形成了一个单词。在谷歌上搜索随机选择的英文字母并试图找到它们的意思,你会有同样多的运气;也许有时候你会随机选择CAT,但大多数时候你会选择XRO或其他一些不是文字的东西


如果您想了解韩语字母表的工作原理,请阅读以下内容:

C#中的字符是Unicode UTF-16编码中的字符。你应该读这篇文章,如果你有更多的问题,再回来:@EricLippert:但这确实提出了一个问题,为什么这样的演员会或多或少地以伪随机的结果成功,而不是满溢、抛出异常或做类似的明智之举?@RobertHarvey,因为显式强制转换在默认情况下不会导致溢出
checked
不是默认值…@RobertHarvey:cast有两种含义,要么“我知道这个表达式实际上是另一种类型;如果我错了,抛出一个异常”。或者它的意思是“我知道这个表达式不是这个其他类型的,但是在这个其他类型中有一个对应的值;给我相应的值”。这两个意思是相反的是一个很好的技巧,不是吗?整数的范围是(-2147483648)到(2147483647)。谢谢,答案比我预期的要多。在java中,int是9位数字,不是吗?@AzadOmer:不是。它是32位,与C#中的相同。不客气@阿扎多默:如果你对学习Unicode的兴趣超过了任何人应该知道的,那么迈克尔·卡普兰是世界顶尖的专家之一,他写了一篇关于Unicode的博客:我当然会读它,这是我的一大兴趣。顺便说一下,号码是222k。