关于C语言真假有什么作用?

来源:百度知道 编辑:UC知道 时间:2024/06/15 02:53:25
C语言中 0为假 非0为真
我很不明白这样的设置有什么意义·或者说有什么作用
非零的范围那么广··而0只有一个
我想知道这对C语言中的逻辑判断有什么好处··
这样设定的意义在哪里?望高人给一个好的解释·以帮助我对C中的逻辑有更加深入的了解
我很迷茫···

个人认为这是C语言灵活的一个表现。
非0即为真,在程序设计里面会省去很多烦琐的代码。

比如malloc函数,不成功会返回NULL(实际上就是0),成功返回所分配的连续单元的首地址。那么在判断malloc()函数是否成功分配了内存,则可以这么写
int *p = (int *)malloc(sizeof(int) * 10);
if (p)
TODO...
else
TODO...

这里,判断语句简化了,当然,推荐的用法是if(p != NULL),因为这样用语义更清晰。

这只是一个例子,还有很多类似的例子。

PS:C语言过于灵活也造成了很多问题,比如写得代码如果没有注释,别人读起来会觉得在读天书,即使是有注释,类似于if(p)这样的写法读起来也捌扭。与C语言有同样问题的perl语言,语法也是相当的灵活,一年一度还举行perl程序阅读大赛呢(C也有类似的比赛)...

一些理解:

计算机的运算机制实际是二进制的。这就决定了每一位(一字节是8位)能表示一对状态(既真和假)。也就是说他们只能出现0和1两个数字。
既然规定0是假。那么非0肯定就是1也就是说是真。而非1肯定就是0,也就是假了。

C语言用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。关系表达式的值,还可以参与其它种类的运算,例如算术运算、逻辑运算等。
但在判断一个数据的“真”或“假”时,却以0和非0为根据:如果为0,则判定为“逻辑假”;如果为非0,则判定为“逻辑真”。
例如,假设num=12,则:
!num的值=0 ,
num>=1 && num<=31的值=1 ,
num || num>31的值=1。
在计算逻辑表达式时,只有在必须执行下一个表达式才能求解时,才求解该表达式(即并不是所有的表达式都被求解)。换句话说:
1)对于逻辑与运算,如果第一个操作数被判定为“假”,系统不再判定或求解第二操作数。
2)对于逻辑或运算,如果第一个操作数被判定为“真”,系统不再判定或求解第