【发布时间】:2021-01-20 09:15:49
【问题描述】:
我被下面的代码弄糊涂了:
char c = 0x66;
printf("~c = %x\n", ~c); //0xffffff99
printf("size of c: %d\n", sizeof(c)); //1 byte
printf("Size of ~c: %d\n", sizeof(~c)); //4 bytes
char 只有 1 个字节,但使用 ~ 运算符的结果将是 4 个字节。为什么结果是~c0xffffff99而不是0x99?
我是否犯了一些错误?
【问题讨论】:
-
根据“症状”,看起来结果升级为int。尝试转换回(未签名?)字符...
-
@AKX 你好,意思是~操作符会将所有小于4字节的数据类型升级为4字节,比如char、short?
-
现在试试
printf("%d\n", sizeof('\x66'));;-) -
从
sizeof()返回的size_t值的正确格式说明符是%zu,而不是%d。 -
除了你得到 UB 因为the correct specifier for
sizeofis%zu
标签: c