鱼C论坛

 找回密码
 立即注册
查看: 2360|回复: 12

[已解决]!什么意思啊

[复制链接]
发表于 2018-3-7 13:10:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这个while后面的!什么意思啊
最佳答案
2018-3-7 21:39:17
必填的用户名 发表于 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 个 ==========
IMG_20180307_130827_EDIT_1.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-7 13:14:59 | 显示全部楼层
表示取反
true变成false
false变成true
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-7 13:15:47 | 显示全部楼层
BngThea 发表于 2018-3-7 13:14
表示取反
true变成false
false变成true

可以在详细些吗?谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-7 13:16:43 | 显示全部楼层
yc哈哈哈 发表于 2018-3-7 13:15
可以在详细些吗?谢谢

还要怎么详细?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-7 13:20:29 | 显示全部楼层
!c2--,先判断c是否为0,为0则循环继续,接着c2=c2-1,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-7 14:17:11 | 显示全部楼层
可以参照!=,不等于的意思,!理解为“不”“否”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-7 17:20:57 | 显示全部楼层
c2==0 加上感叹号后!c==1;
如果c2不是等于0,是其他的数时 加上感叹号后!c==0

就是取反符号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-7 20:05:41 | 显示全部楼层
自己看吧
        int c1 = 2, c2 = 0;
000C17CE C7 45 F8 02 00 00 00 mov         dword ptr [c1],2  
000C17D5 C7 45 EC 00 00 00 00 mov         dword ptr [c2],0  

        while(!c2--)
000C17DC 8B 45 EC             mov         eax,dword ptr [c2]  
000C17DF 89 85 24 FF FF FF    mov         dword ptr [ebp-0DCh],eax  
000C17E5 8B 4D EC             mov         ecx,dword ptr [c2]  
000C17E8 83 E9 01             sub         ecx,1  
000C17EB 89 4D EC             mov         dword ptr [c2],ecx  
000C17EE 83 BD 24 FF FF FF 00 cmp         dword ptr [ebp-0DCh],0  
000C17F5 75 2C                jne         main+73h (0C1823h)  
                printf("%d%d\n", c1--, c2);
000C17F7 8B 45 F8             mov         eax,dword ptr [c1]  
000C17FA 89 85 24 FF FF FF    mov         dword ptr [ebp-0DCh],eax  
000C1800 8B 4D F8             mov         ecx,dword ptr [c1]  
000C1803 83 E9 01             sub         ecx,1  
000C1806 89 4D F8             mov         dword ptr [c1],ecx  
000C1809 8B 55 EC             mov         edx,dword ptr [c2]  
000C180C 52                   push        edx  
000C180D 8B 85 24 FF FF FF    mov         eax,dword ptr [ebp-0DCh]  
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  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-7 20:49:00 | 显示全部楼层
“!”是运算符逻辑非,它的优先级比自减符“--”高,程序先执行“!c2”,判断结果为真,执行循环体输出“1,-1”,输出后再次判断循环条件,而之前的“!c2”为真,即值为1,所以自减过后变为0,判断结果为假,跳出循环体,程序结束
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-7 21:39:17 | 显示全部楼层    本楼为最佳答案   
必填的用户名 发表于 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 个 ==========
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-7 23:44:58 | 显示全部楼层
取反符号 真的变假 假的变真
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-8 07:38:04 | 显示全部楼层
就是用上所有这个符号的非0数字都会变成0,不执行程序,如果这个符号右边的数值是0就变成1,满足条件执行循环体的程序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-8 11:25:33 | 显示全部楼层
谢谢大家的解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-29 11:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表