char 字符数据的存储

hrx1989 2011-07-25 10:06:39
各位大虾,我想请问一下的是char数据在一个字节中是如何存储的。也许这个问题是比较简单,但是还是希望能够不吝赐教。谢谢!


Q:char x = 127;没有溢出是能够正确输出。
x = 128时溢出了。这个时候编译器是如何做的呢?
我想要知道的是这个数据在内存中是如何表示或者说是存储的。
...全文
227 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
辰岡墨竹 2011-07-26
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hu7324829 的回复:]

编译器处理128 = 1000 0000, 对于char来说就是-128.不多说为什么了!
同样对于char , 大于了255之后, 溢出后编译器就会归0.同1L所说
[/Quote]
不,未定义的意思就是可能是-128也可能是0,也可能是其它任何值。
辰岡墨竹 2011-07-26
  • 打赏
  • 举报
回复
的确,不过默认情况下一般都是signed,因为UNIX的C实现是那样的,万恶的兼容性。
自由建客 2011-07-26
  • 打赏
  • 举报
回复
顶楼上,C 语言参考手册说的很清楚了,三个东西。
不能假设 char 是否属有符号数, char 只能当字符用,要用单字节整数得明确说明 signed char 或 unsigned char 。
FrankHB1989 2011-07-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 babilife 的回复:]

char 的存储范围是-128--+127

这个下午已经讨论过了

http://topic.csdn.net/u/20110725/16/93bb3223-b4bc-45f7-b6fe-bec6ce442e32.html
[/Quote]
渣解。
ISO C和ISO C++中char/signed char/unsigned char是三种不同的基本类型。char是不是有符号由实现定义。
JiangXiang 2011-07-25
  • 打赏
  • 举报
回复
For example, if we might attempt to assign
the value 336 to an 8-bit signed char,
the actual value assigned will be 80,
because 80 is equal to 336 modulo 256.

That's it.
hu7324829 2011-07-25
  • 打赏
  • 举报
回复
编译器处理128 = 1000 0000, 对于char来说就是-128.不多说为什么了!
同样对于char , 大于了255之后, 溢出后编译器就会归0.同1L所说
Jxiaoshen 2011-07-25
  • 打赏
  • 举报
回复
无符号,没有溢出,所有的无符号运算都是以2的n次方为模。
有符号,有溢出,结果未定义
qianfoyuan 2011-07-25
  • 打赏
  • 举报
回复
char 范围在 -128 到 127
unsigned char 范围在 0 到 255

如果要输出 128 ,你用 %d 吧.
机智的呆呆 2011-07-25
  • 打赏
  • 举报
回复
9 The range of nonnegative values of a signed integer type is a subrange of the
corresponding unsigned integer type, and the representation of the same value in each type is the same.31) A computation involving unsigned operands can never overflow, because a result that cannot be represented by the resulting unsigned integer type is reduced modulo the number that is one greater than the largest value that can be represented by the resulting type.
辰岡墨竹 2011-07-25
  • 打赏
  • 举报
回复
嗯,LS基本ASCII码的确是128个,但是它是从0~127。而且C里的char虽然设计时是为了存放基本ASCII,但是实际还是当作一个字节的有符号整数处理的。
apingfang 2011-07-25
  • 打赏
  • 举报
回复
ASCII码符号总共128个,对应的ASC码最大的是128,一个符号占一个字节
用二进制表示128这个数时2^7(128),所以一个字节自然就是8位

辰岡墨竹 2011-07-25
  • 打赏
  • 举报
回复
嗯,说归零不太恰当,就是相当于取2^n的模,n是整数位数。
至善者善之敌 2011-07-25
  • 打赏
  • 举报
回复
char 的存储范围是-128--+127

这个下午已经讨论过了

http://topic.csdn.net/u/20110725/16/93bb3223-b4bc-45f7-b6fe-bec6ce442e32.html
辰岡墨竹 2011-07-25
  • 打赏
  • 举报
回复
C里有符号整数的溢出是未定义行为,存储方式不能确定。
无符号整数溢出时归0。

69,377

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧