首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么Char有一个有界的实例?

为什么Char有一个有界的实例?
EN

Stack Overflow用户
提问于 2013-11-16 16:10:11
回答 4查看 1.7K关注 0票数 9

为什么会有maxBound of Char?如果Char是字符,那么为什么用数字来解释它,如果它不是一个数字,它意味着什么?

代码语言:javascript
运行
复制
> maxBound :: Char
'\1114111'
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-11-16 16:21:34

所有的字符,就像电脑里的所有东西一样,最终都是数字。Char表示通过数字表示的unicode字符。您可以使用Charchrordchr值之间进行转换。例如,a的unicode值是97,所以ord 'a'97chr 97'a'

Char '\1114111'是表示数字1114111或0x10FFFF的Char,它是非字符的已定义。这是在Unicode中定义的最大值,也是Haskell支持的最大值:'\1114112'将导致编译错误。

票数 21
EN

Stack Overflow用户

发布于 2013-11-16 16:22:04

字符编码是很棘手的。在幕后,所有的字符都是用数字表示的。Unicode标准提供了一组“代码点”,这些“代码点”只是映射到特定序列的真实字符的数字。Unicode定义了0到1114111之间的代码点,这就是您在尝试maxBound时所看到的。

Char将Unicode代码点编码为单个整数,这有点低效。如果您想要高效的编码,请使用Text

您可以看到\1114111的显示,因为这是maxBound :: Char所代表的代码点,没有比这更高效、更有意义的方法来显示它了。特别是,它在Unicode标准的“专用补充区-B”中,这意味着它被保留用于Unicode的范围之外,因此没有标准意义。

票数 4
EN

Stack Overflow用户

发布于 2013-11-16 16:21:55

Char数据类型表示Unicode值。这些值以数字的形式存储在计算机中,每个数字作为屏幕上的特定表示形式存储。对于Char,最小值是0,最大值是1114111

一个更简单的例子是C,其中char类型等价于对应于ASCII字符表的7位数字,它们的值可以从0到127不等,尽管我认为将整个8位字节存储在char中是合法的,给出的值为0到255。

记住,一切都是电脑的数字。有些数据类型具有可以排序和有限的表示,因此它们具有最小值和最大值。

Haskell中没有最小值或最大值的数据类型的一个例子是Integer,因为只要您有足够的可用内存,它就可以表示任何整数值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20020616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档