码迷,mamicode.com
首页 > 其他好文 > 详细

[C]if (CONDITION)语句中CONDITION的情况

时间:2017-07-03 13:51:40      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:结果   window   sign   val   argv   类型   false   rgb   pop   

编译环境:
Ubuntu 12.04: gcc
Windows XP  : VS-2005

深入一下if (CONDITION)语句中CONDITION的情况。即CONDITION何时为真,何时是假。

測试代码主体例如以下:
int main(int argc, char *argv[])
{
	if (CONDITION)
		printf("true.\r\n");
	else
		printf("false.\r\n");

	return 0;
}
情境1:
CONDITION: 
(1) /* true  */
(0) /* false */
(-1) /* true  */
结论:0为假,非零即真。



情境2:
signed int value1 = 11;
signed int value2 = 328;
CONDITION: 
(value1 - value2) /* true - 同[情境1]的第3种情况 */
((value1 - value2) > 2000) /* false */

情境3:
unsigned int value1 = 11;
unsigned int value2 = 328;
CONDITION: 
(value1 - value2) /* true  - 同[情境1]的第3种情况 */
((value1 - value2) > 2000) /* true  */
这里涉及数据类型的“隐式转换”,(value1 - value2)的结果被隐式地转换成unsigned int类型,转换方式是(value1 - value2)的补码
((value2 - value1) > 2000) /* false */

情境4:
int value1 = 11;
unsigned int value2 = 328;
结果同情境3。
数据类型的“隐式转换”。假设当中一个操作数是unsigned int, 则还有一个操作数也被视为unsigned int
(value1 - value2) /* true  */
((value1 - value2) > 2000) /* true  */

[C]if (CONDITION)语句中CONDITION的情况

标签:结果   window   sign   val   argv   类型   false   rgb   pop   

原文地址:http://www.cnblogs.com/lxjshuju/p/7110400.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!