社区
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有什么用呢,它们又分别代表什么呢??求大师详解,感激不尽!!
...全文
657
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
、
un
signed
char
、
signed
char
之间的区别
但通常情况下我们也会使用
un
signed
char
、
signed
char
来明确表明我们的变量类型,在某些场景下例如我们的代码会跑在不同的平台上,为了确保结果与我们预期的一致而使用限定符来表明类型,这是一种保证预期结果的好方法。,我的个人理解是应该是为了可移植性,
char
的类型由编译器决定,这样可以统一在不同的平台上表现一致,但这仅限于你的数据是在额定范围之内。,语言相当于标准,而编译器是实现这些标准的实体,这样的类型一般是需要编译器来决定它是什么类型,此外像int与
char
也是一样,在。
char
,
signed
char
,
un
signed
char
1. 区别 (1) ANSI C 提供了3种字符类型,分别是
char
、
signed
char
、
un
signed
char
(2)
char
相当于
signed
char
或者
un
signed
char
,但是这取决于编译器 (3)这三种字符类型都是按照1个字节存储的,可以保存256个不同的值 (4)
signed
char
取值范围是 -128 到 127 (5)
un
signed
char
取值范围是 0 到 255 2. 等价 (1)uint_8 等价于
un
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默认就是
un
signed
int). 2.三者都占1个字节 3.
signed
char
取值范围是 -
【C语言】
char
un
signed
char
signed
char
char
un
signed
char
signed
char
C++ 语言
65,208
社区成员
250,517
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章