【发布时间】:2013-08-17 23:42:48
【问题描述】:
在 C 中将 int 分配给 char 会发生什么?它总是忽略左边多余的位吗?
示例(4 字节 int):
unsigned char c = 0;
unsigned int i = 500;
c = i; // c is 244
c = i << 24 >> 24; //c is 244
i = i << 24 >> 24; //i is 244
在二进制中,500 是 111110100,244 是 11110100。
【问题讨论】:
-
@WhozCraig 定义了无符号整数溢出(它采用溢出值模
UINT_MAX + 1)。 -
@H2CO3 你是对的。 unsigned 不能溢出(考虑到我写了this answer,我应该很清楚这一点)。
-
@WhozCraig 不用担心......一旦我错误地声明(无论出于何种脑死原因)编译 Objective-C 时代码生成不需要类型信息。尽管我在几分钟内就纠正了自己,但有些人仍然坚持说我不知道我在说什么……随便。
标签: c binary bit-manipulation