问题
Here i am confused with condition statement which has negative number,if in the condition only negative number is given as if(-1) then it is true but if (-1>0) then it become false please explain any one thanks in advance
if(-1) // This true why and how?
if(-1>0)//This is false why and how
Now what is impact in below code please help to understand
#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");
}
}
回答1:
if(-1)
// This true why and how?
Any non-zero number is evaluated as true
.
if(-1>0)
//This is false why and how
-1
is less than 0
that's why expression -1 > 0
evaluated to false
.
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
strlen
returns size_t
type which is unsigned
. The result of strlen(a)-strlen(b
would be an unsigned int
. But -1
in not unsigned
, therefore it is converted to unsigned
before comparison.strlen(a)-strlen(b)>0
will result in comparison UINT_MAX -1 > 0
回答2:
Function strlen()
returns a size_t
, which is an unsigned integer type.
For this reason, strlen(a)-strlen(b)
is an unsigned subtraction. It will produce a nonnegative number because it will produce a size_t
and all values of size_t
are nonnegative.
回答3:
Every value, which is not 0, gets evaluated as true in if sentence.
回答4:
Adding to existing answer:
char a[]="he";
char b[]="she";
if(strlen(a)-strlen(b)>0)
strlen returns size_t
. Result of different of size_t
would be size_t
too.
Unsigned numbers are always >= 0
. In your case it is similar to
if((2U - 3U) > 0U)
See live code here.
You should rewrite the condition to:
if(strlen(a) > strlen(b))
回答5:
The idea that any nonzero number is considered true is a very old concept in computer science. Think of it as treating the raw bits as inputs to a big OR gate. If any bit is a one, then the output is a one (or true). A negative number is a number where the most significant bit, the sign bit, is a one.
来源:https://stackoverflow.com/questions/24673795/why-negative-number-is-taken-as-true-in-condition-statement