这里我对具有负数的条件陈述感到困惑,如果在条件中只给出负数,如果给出(-1)那么它是真的但是如果(-1> 0)则它变为假,请解释任何一个提前谢谢
if(-1) // This true why and how?
if(-1>0)//This is false why and how
现在对下面的代码有什么影响请帮助理解
#include <stdio.h>
#include <string.h>
main()
{
char a[]="he";
char b[]="she";
if(strlen(a)-strlen(b)>0)//how it is true ?if(2-3>0)i.e if(-3>0) which is false
//here why it is true
{
printf("-ve greater then 0 ");
}
else
{
printf(" not greater then 0");
}
}
答案 0 :(得分:4)
if(-1)
//这是真的为什么以及如何?
任何非零数字都会被评估为true
。
if(-1>0)
//这是错误的原因和方式
-1
小于0
,这就是为什么表达式-1 > 0
评估为false
的原因。
if(strlen(a)-strlen(b)>0)
//怎么回事?if(2-3> 0),即if(-3> 0)是假的 //这里为什么是真的
strlen
返回size_t
类型unsigned
。 strlen(a)-strlen(b
的结果为unsigned int
。但是-1
不是unsigned
,因此在比较之前它会转换为unsigned
。strlen(a)-strlen(b)>0
会导致比较UINT_MAX -1 > 0
答案 1 :(得分:2)
函数strlen()
返回size_t
,这是一个无符号整数类型。
因此,strlen(a)-strlen(b)
是无符号减法。它会产生一个非负数,因为它会产生size_t
,而size_t
的所有值都是非负数。
答案 2 :(得分:1)
如果句子中的每个值(非0)都会被评估为真。
答案 3 :(得分:1)
添加到现有答案:
char a[]="he";
char b[]="she";
if(strlen(a)-strlen(b)>0)
strlen返回size_t
。不同size_t
的结果也是size_t
。
无符号数始终为>= 0
。在你的情况下,它类似于
if((2U - 3U) > 0U)
请参阅live code here。
您应该将条件重写为:
if(strlen(a) > strlen(b))
答案 4 :(得分:0)
任何非零数字都被认为是真实的想法是计算机科学中一个非常古老的概念。可以把它想象为将原始位作为大OR门的输入。如果任何位是1,则输出为1(或为真)。负数是最高有效位(符号位)为1的数字。