首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C语言if语句的大小

问C语言if语句的大小
EN

Stack Overflow用户
提问于 2015-08-12 06:27:03
回答 2查看 469关注 0票数 6
代码语言:javascript
复制
#include <stdio.h>
main()
{
   if (sizeof(int) > -1)
       printf("True");
   else
       printf("False");
}

答:

错误

但是根据逻辑,sizeof(int)返回2和if(2>-1)返回1,它应该打印True。

为甚麽会有不同的表现呢?

EN

回答 2

Stack Overflow用户

发布于 2015-08-12 06:34:19

sizeof是一个返回大小的操作符,返回的值类型是unsigned int。由于unsigned的秩高于singed类型,因此-1被视为无符号数。-1在本案中被视为0xFFFF。因此,if (sizeof(int) > 0XFFFF)被计算为false。

​

​

票数 2
EN

Stack Overflow用户

发布于 2015-08-12 06:42:35

如果你写

代码语言:javascript
复制
if ( ( int )sizeof(int) > -1)

您将得到预期的结果,即True。

运算符大小返回一个类型为size_t的值,该值对应于某些实现定义的无符号整数类型。

来自C STandard (6.5.3.4运算符的大小和对齐)

5这两个运算符的结果的值是实现定义的,及其类型(无符号整数类型)是size_t,定义在(和其他标头)中。

size_t的秩在任何情况下都大于或至少等于int类型的秩。这意味着当编译器需要确定表达式的类型时,它会将操作数转换为级别较高的操作数的类型。如果操作数具有相同的秩,但一个操作数具有无符号整数类型,而其他操作数具有有符号整数类型,则公共类型是无符号int类型。

因此,在if语句的条件下

代码语言:javascript
复制
if ( sizeof(int) > -1)

-1被转换为无符号整数类型的size_t,并且由于它的内部表示(所有位都被设置为1)比sizeof( int )的值更自由。

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

https://stackoverflow.com/questions/31957514

复制
相关文章

相似问题

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