! 为逻辑非.
逻辑非(!x)的结果有2种 : TRUE(1), FALSE(0)
逻辑非的等价式 !x = (x == 0)
例子:
#include "stdafx.h"
#include <windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
int x=3;
int iTemp = 0;
do
{
printf("%d\n",x-=2);
--x;
} while (!x);
iTemp = !x;
if (!x)
{
OutputDebugStringA("");
}
else
{
OutputDebugStringA("");
}
return 0;
}
进入 do while循环后
进入次数0:
x = 3 => x-=2 => x = 1 => 打印1 => --x = 0 => !x = TRUE(1)
进入次数1:
x = 0 => x-=2 => x = -2 => --x => x = -3 => !x = FALSE(0), 因为 (!x 等价与 (x == 0)), 因为 -3 != 0 所以 !x 为FALSE
so 运行结果如下:
1
-2
上面的例子是分解整理后的, 原始题目如下:
若有如下语句
int x=3;
do
{printf("%d\n",x-=2);}while(!(--x));
则上面程序段( ).
A.输出的是1 B.输出的是1和-2 C.输出的是3和0 D.是死循环
答案是B.