社区
C++ 语言
帖子详情
关于unsigned char和signed char的小问题
caicailiang
2011-05-15 11:53:29
在C++中,char类型可分为signed char 和unsigned char,它们实际上代表 -128到127 和 0到255的值。但ASCII码中只有0到127的值代表相应的字符。请问多出来的-128到-1 或者 128到255有什么用呢,它们又分别代表什么呢??求大师详解,感激不尽!!
...全文
633
7
打赏
收藏
关于unsigned char和signed char的小问题
在C++中,char类型可分为signed char 和unsigned char,它们实际上代表 -128到127 和 0到255的值。但ASCII码中只有0到127的值代表相应的字符。请问多出来的-128到-1 或者 128到255有什么用呢,它们又分别代表什么呢??求大师详解,感激不尽!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
caicailiang
2011-05-15
打赏
举报
回复
感谢各位,学到不少东西!尤其感谢supermegaboy老师!!!
abcdef0966
2011-05-15
打赏
举报
回复
汉字的gbk编码就是超过了signed char范围的
飞天御剑流
2011-05-15
打赏
举报
回复
你在这几行字中存在很多误解。
C/C++标准规定了两种字符集:源码字符集和执行字符集。两种字符集各自分成了两部分,一部分叫基本字符集,另一部分叫扩展字符集。C/C++标准规定了基本字符集中应该具有哪些字符,但扩展字符集中的字符是实现相关的。ASCII码只是C/C++所规定的字符集的其中一种,只不过由于C/C++是源于美国人的绝活,因此ASCII码就成了一种最常用的字符集,但要认识到ASCII码并非全部,C/C++标准允许字符集的本地化,头文件locale.h就是用于处理本地化的。
char类型是用于处理字符的,它的底层类型可以是signed char,也可以是unsigned char,而signed char和unsigned char才是真正的整数类型,选择哪一种来实现char是实现相关的,如果你把char用作整数,就不应该用char这种类型,应显式地使用signed或者unsigned。
执行字符集的码值是实现相关的。
但无论哪种实现,char中表示的基本字符集都必须保证是正数。超过基本字符集部分的属于扩展字符集,对于ASCII码来说,就是signed char的负数部分和unsigned char的128--255部分。
无论C还是C++都规定char是一字节的,但一字节不一定只有8位,而是一字节至少8位,因此,signed char和unsigned char的码值不一定是-128--127或者0--255范围,这个范围只不过是常用字符集的码值范围。
所以,当你使用char、signed char或者unsigned char的边界的时候,不应该预设最大码值为127或255之类,这是错误的,应使用limits.h头文件中定义的宏,这些宏就是用于处理类似的移植性问题的,例如:
CHAR_MIN、CHAR_MAX、SCHAR_MIN、SCHAR_MAX、UCHAR_MIN、UCHAR_MAX等等。
volvoxc
2011-05-15
打赏
举报
回复
ASCII表里0到255都有相应的符号啊,再说不只是简单代表符号,代表什么都可以,只要不溢出
lirg8405
2011-05-15
打赏
举报
回复
你认为char类型只是为了表示或者存储ASCII码吗???
它只是一种类型,和其他类型是一样的,
就好像是一个碗,它只代表了它表装的量,不限制了要装什么,当然了,这个量是有限的,你不能放超过它能装的量的东西
char类型你只能放-128~127之间的数值,超过就溢出;
unsigned char你只能放0~255的数
king_ss_
2011-05-15
打赏
举报
回复
由于常用的英文字符用8位二进制就可以表示,所以通常就将8位称为一个字节。这写多出来的数字并不代表什么,可以看作是一种冗余策略,就是有意让它多出来一些空间,如果以后有需要的话可以用它们在代表什么内容;试想一下,在设计的时候,总不能设计的不够标识这些字符,或者是恰好够,这样都是不好的,因为以后可能还要扩展。例如在编程时:Unicode字符集用16bit标识一个字符,它可以用来标识全世界各种语言的文字;多字节字符集用8bit标识一个字符。当然为什么是8bit、16bit应该还有另一个原因,就是现在计算机一般是32bit字长,就是cpu一次能处理32bit,用来标识字符的bit数要能被32整除,这样计算机cpu在处理信息时也方便一些,速度更快,效率更高。
king_ss_
2011-05-15
打赏
举报
回复
supermegaboy讲的很好。学习了。
un
signed
char
与
signed
char
详解
un
signed
char
与
signed
char
详解
char
与
signed
char
,
un
signed
char
的区别?
今天有一个困扰的
问题
,就是
char
与
signed
char
,
un
signed
char
这三者的区别。 二、三者之间关系 1.ANSI C 提供了3种字符类型,分别是
char
、
signed
char
、
un
signed
char
。而不是像short、int一样只有两种(int默认就是...
char
,
un
signed
char
,
signed
char
区别
signed
char
范围至少为 [-127 ~ 127] 。 (一般范围是 -128 到 127)
un
signed
char
范围至少为 [0 ~ 255] 说“至少”是因为C++标准只指定了对应每一种数据类型值的最小覆盖范围。如果你真的要表示小的整数,...
char
与
signed
char
,
un
signed
char
的区别
三者之间关系 1) ANSI C 提供了3种字符类型,分别是
char
、
signed
char
、
un
signed
char
。而不是像short、int一样只有两种(int默认就是
un
signed
int). 2) 三者都占1个字节. ...5) 所谓
signed
char
和
un
signed
cha...
C++中的
char
、
signed
char
、
un
signed
char
一、
问题
的提出 ...今天有一个困扰的
问题
,就是
char
与
signed
char
,
un
signed
char
这三者的区别。 二、三者之间关系 1.ANSI C 提供了3种字符类型,分别是
char
、
signed
char
、
un
signed
char
。而不是像short...
C++ 语言
64,654
社区成员
250,484
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章