除位字段之外的所有类型都占用整数个"字节",而sizeof返回该数字.unsigned char 占用 1"byte",因此sizeof(unsigned char)总是返回1.对吗?
但是,无符号字符是否总是填充 "字节",或者CHAR_BITS是否小于"字节"或UCHAR_MAX中的位数小于(2到CHAR_BITS的幂) - 1?如果unsigned char不能保存其位数允许的所有值,那么使用unsigned chars复制其他类型的工作原理如何?
int src = -1, dest;
size_t i;
for (i = 0; i < sizeof dest; i++) {
((unsigned char *) &dest)[i] = ((unsigned char *) &src)[i];
}
Run Code Online (Sandbox Code Playgroud)
不,unsigned char不能有填充位.
(C99,6.2.6.2p1)"对于无符号字符以外的无符号整数类型,对象表示的位应分为两组:值位和填充位(不需要任何后者)."
是的,sizeof (unsigned char)保证是1.
(C99,6.5.3.4p3)"当应用于具有char,unsigned char或signed char(或其合格版本)类型的操作数时,结果为1."
| 归档时间: |
|
| 查看次数: |
536 次 |
| 最近记录: |