首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么C中的大运算符在不操作的情况下给出不同的输出?

为什么C中的大运算符在不操作的情况下给出不同的输出?
EN

Stack Overflow用户
提问于 2020-08-28 13:31:56
回答 1查看 81关注 0票数 3

我是编程新手,是C.的sizeof操作符介绍的,我发现了以下有趣的事情:

代码语言:javascript
运行
复制
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吗?

此外,以下代码进一步加剧了我的困惑:

代码语言:javascript
运行
复制
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字节。但无法从上面得到我的问题的答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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类型。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63634775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档