8

除位字段外的所有类型都占用整数个“字节”,并且 sizeof 返回该数字。一个无符号字符占用1 个“字节”,所以 sizeof(unsigned char) 总是返回 1。对吗?

但是,无符号字符是否总是填充“字节”,或者 CHAR_BITS 是否可以小于“字节”中的位数或 UCHAR_MAX 小于(2 的 CHAR_BITS 次方)- 1?如果 unsigned char 不能保存它的位数也允许的所有值,那么使用 unsigned char 复制其他类型如何工作?

int src = -1, dest;
size_t i;

for (i = 0; i < sizeof dest; i++) {
  ((unsigned char *) &dest)[i] = ((unsigned char *) &src)[i];
}
4

1 回答 1

9

不,unsigned char不能有填充位。

(C99, 6.2.6.2p1)“对于 unsigned char 以外的无符号整数类型,对象表示的位应分为两组:值位和填充位(不需要任何后者)。”

是的,sizeof (unsigned char)保证是1

(C99,6.5.3.4p3)“当应用于具有 char、unsigned char 或 signed char 类型(或其限定版本)的操作数时,结果为 1。”

于 2012-12-18T09:03:36.100 回答