C if语句整数

C if语句整数,c,if-statement,integer,C,If Statement,Integer,我认为这是一个简单的问题,但我正在努力解决以下问题。在我的示例中,我有以下语句(语言为C): 现在,如果我对这一点是正确的,那么当foobar不为零时,这条语句是正确的。因此,它应该与if(foobar!=0)基本相同 但是如果foobar变成负数会发生什么呢?是负数还是正数。在if 也可考虑负数:-1<P> -C中的1在内部表示为:0xFFFFFFFF,在这种情况下,如果我将它转换为无符号整数,它将是一个正数 但是在C99标准编译器出现之后,我建议您使用 。使猜测工作大大减少: 同样 if (

我认为这是一个简单的问题,但我正在努力解决以下问题。在我的示例中,我有以下语句(语言为C):

现在,如果我对这一点是正确的,那么当
foobar
不为零时,这条语句是正确的。因此,它应该与if(foobar!=0)基本相同


但是如果
foobar
变成负数会发生什么呢?

是负数还是正数。在
if

也可考虑负数:-1<P> -C中的1在内部表示为:

0xFFFFFFFF
,在这种情况下,如果我将它转换为无符号整数,它将是一个正数

但是在C99标准编译器出现之后,我建议您使用
。使猜测工作大大减少:

同样

if (foobar) 

表示foobar不是零,所以它是正数还是负数无关紧要,它仍然不是零

如果foobar是负数,您的语句应该返回true(它仍然不同于零)但是您应该避免这种测试,因为以这种方式测试可能具有不同“真”值的变量不是最佳做法。

这正是我试图避免的,它会进入未知状态。我在别人的程序中看到了这行代码,然后它击中了我。为什么使用该语句而不是if(foobar!=0);现在我知道了。谢谢大家回答我的问题!负数的表示是实现定义的。此外,这与这个问题无关,只有价值才重要,不管它是如何表现的。在此上下文中,
int
不会转换为
unsigned int
。@M.M从技术上讲,一切都是“实现定义的”——除非您计划为特定的机器实现它。如果我实现了一个不能表示零的机器会怎么样?这就是为什么
:)您显然不知道“实现定义”是什么意思。如果有一台机器不能表示0,那么它就不能有一个符合标准的C编译器。@M.M你能不能在ISO文档中指出“如果有一台机器不能表示0,那么它就不能有一个符合标准的C编译器”,它的最小长度必须是16位(1字节的大小可能大于8位),可能是,@phuclv旧帖子怎么可能是新帖子的复制品?@SHR。这里不考虑发布时间。但是另一个问题是2010年的postedi,它怎么可能比这个更新呢?我不明白为什么这个问题当时没有结束。OP已经明白,行为取决于
foobar
是否等于零。所以剩下的唯一问题是“负数等于零吗?”哪个。。。是一个数学问题,而不是一个编程问题,从某种程度上说,它是有意义的(如果你不能回答这个问题,那么你怎么可能一开始就听说过负数?)。
if (foobar)