我是编程新手,是C.的sizeof操作符介绍的,我发现了以下有趣的事情:
long long int a = 100;
printf("%d %d\n", sizeof(a), sizeof(!a)); // Output : 8 1我知道sizeof(a) (在我的系统中)是8,但我不明白为什么sizeof(!a)变成1。
是因为!a变成0,存储为char吗?
此外,以下代码进一步加剧了我的困惑:
long long int a = 100;
char b = 9;
printf("%d %d %d %d\n", sizeof(a), sizeof(b), sizeof(a+b), sizeof(!a+b)); // Output : 8 1 8 4有人能解释一下吗,这里发生了什么?由于类型转换,字符应该转换为长int,对吗?如果是这样的话,我理解输出的8 1 8部分。但是,为什么sizeof(!a+b)是4?
根据这个答案,sizeof()返回size_t,大小为4字节。但无法从上面得到我的问题的答案。
发布于 2020-08-28 13:35:05
!操作符的结果具有int类型,因此sizeof(!a)与sizeof(int)相同。
这在C标准关于逻辑否定操作符!的6.5.3.3节中有记录。
如果其操作数的值比较等于0,则逻辑否定运算符的结果是0;如果其操作数的值比较等于0,则为1。
int**.**结果类型为,表达式!E等价于(0==E)。
在大多数系统中,int大小为4字节,因此sizeof(int)将计算为4。如果您获得1作为sizeof(!a)的结果,那么您可能使用的是C++编译器,其中!的结果具有bool类型。
https://stackoverflow.com/questions/63634775
复制相似问题