!什么意思啊
这个while后面的!什么意思啊 表示取反true变成false
false变成true BngThea 发表于 2018-3-7 13:14
表示取反
true变成false
false变成true
可以在详细些吗?谢谢 yc哈哈哈 发表于 2018-3-7 13:15
可以在详细些吗?谢谢
还要怎么详细? !c2--,先判断c是否为0,为0则循环继续,接着c2=c2-1, 可以参照!=,不等于的意思,!理解为“不”“否” c2==0 加上感叹号后!c==1;
如果c2不是等于0,是其他的数时 加上感叹号后!c==0
就是取反符号 自己看吧
int c1 = 2, c2 = 0;
000C17CE C7 45 F8 02 00 00 00 mov dword ptr ,2
000C17D5 C7 45 EC 00 00 00 00 mov dword ptr ,0
while(!c2--)
000C17DC 8B 45 EC mov eax,dword ptr
000C17DF 89 85 24 FF FF FF mov dword ptr ,eax
000C17E5 8B 4D EC mov ecx,dword ptr
000C17E8 83 E9 01 sub ecx,1
000C17EB 89 4D EC mov dword ptr ,ecx
000C17EE 83 BD 24 FF FF FF 00 cmp dword ptr ,0
000C17F5 75 2C jne main+73h (0C1823h)
printf("%d%d\n", c1--, c2);
000C17F7 8B 45 F8 mov eax,dword ptr
000C17FA 89 85 24 FF FF FF mov dword ptr ,eax
000C1800 8B 4D F8 mov ecx,dword ptr
000C1803 83 E9 01 sub ecx,1
000C1806 89 4D F8 mov dword ptr ,ecx
000C1809 8B 55 EC mov edx,dword ptr
000C180C 52 push edx
000C180D 8B 85 24 FF FF FF mov eax,dword ptr
000C1813 50 push eax
000C1814 68 30 7B 0C 00 push offset string "%d%d\n" (0C7B30h)
000C1819 E8 16 FB FF FF call _printf (0C1334h)
000C181E 83 C4 0C add esp,0Ch
000C1821 EB B9 jmp main+2Ch (0C17DCh)
return 0;
000C1823 33 C0 xor eax,eax “!”是运算符逻辑非,它的优先级比自减符“--”高,程序先执行“!c2”,判断结果为真,执行循环体输出“1,-1”,输出后再次判断循环条件,而之前的“!c2”为真,即值为1,所以自减过后变为0,判断结果为假,跳出循环体,程序结束 必填的用户名 发表于 2018-3-7 20:49
“!”是运算符逻辑非,它的优先级比自减符“--”高,程序先执行“!c2”,判断结果为真,执行循环体输出“ ...
程序先执行“!c2”
也就是这样?
#include <stdio.h>
int main(void)
{
int c1 = 2, c2 = 0;
while( (!c2)-- )
printf("%d%d\n", c1--, c2);
return 0;
}
可是
1>------ 已启动全部重新生成: 项目: tmp, 配置: Debug Win32 ------
1>main.c
1>c:\visualstudioprojects\tmp\tmp\main.c(7): error C2105: “--”需要左值
1>已完成生成项目“tmp.vcxproj”的操作 - 失败。
========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========
取反符号 真的变假 假的变真 就是用上所有这个符号的非0数字都会变成0,不执行程序,如果这个符号右边的数值是0就变成1,满足条件执行循环体的程序 谢谢大家的解答
页:
[1]