为什么会有maxBound
of Char
?如果Char
是字符,那么为什么用数字来解释它,如果它不是一个数字,它意味着什么?
> maxBound :: Char
'\1114111'
发布于 2013-11-16 08:21:34
发布于 2013-11-16 08:22:04
字符编码是很棘手的。在幕后,所有的字符都是用数字表示的。Unicode标准提供了一组“代码点”,这些“代码点”只是映射到特定序列的真实字符的数字。Unicode定义了0到1114111之间的代码点,这就是您在尝试maxBound
时所看到的。
Char
将Unicode代码点编码为单个整数,这有点低效。如果您想要高效的编码,请使用Text
。
您可以看到\1114111
的显示,因为这是maxBound :: Char
所代表的代码点,没有比这更高效、更有意义的方法来显示它了。特别是,它在Unicode标准的“专用补充区-B”中,这意味着它被保留用于Unicode的范围之外,因此没有标准意义。
发布于 2013-11-16 08:21:55
Char
数据类型表示Unicode值。这些值以数字的形式存储在计算机中,每个数字作为屏幕上的特定表示形式存储。对于Char
,最小值是0
,最大值是1114111
。
一个更简单的例子是C,其中char
类型等价于对应于ASCII字符表的7位数字,它们的值可以从0到127不等,尽管我认为将整个8位字节存储在char
中是合法的,给出的值为0到255。
记住,一切都是电脑的数字。有些数据类型具有可以排序和有限的表示,因此它们具有最小值和最大值。
Haskell中没有最小值或最大值的数据类型的一个例子是Integer
,因为只要您有足够的可用内存,它就可以表示任何整数值。
https://stackoverflow.com/questions/20020616
复制相似问题