标题:一个被人忽视的条件语句: 逻辑取反 "!"
只看楼主
tigerdown
Rank: 1
等 级:新手上路
帖 子:63
专家分:3
注 册:2017-8-21
结帖率:69.23%
已结贴  问题点数:5 回复次数:5 
一个被人忽视的条件语句: 逻辑取反 "!"
刚开始,我把它误作为"不等于 != "条件语句,随后我查了二本书,它们是这样叙述的:
中文书:!逻辑取反 ---- 对变量取反或对表达式的结果取反
英文书: ! express ---- Returns true when express is false

显然前者解释得更具体,更精准。下面我举个例子来看一下,这条件语句是怎样被巧妙运用的,这对程序员是非常有用的。
这是程序中的一段,它是用来阅读文件的:

;循环读出文件并处理每个字节
;********************************************************************
..............
        xor    eax,eax
        mov    @dwBytesRead,eax
        .while    TRUE
            lea    esi,@szReadBuffer
            invoke    ReadFile,@hFile,esi,sizeof @szReadBuffer,addr @dwBytesRead,0
            .break    .if ! @dwBytesRead  ;!- 逻辑取反 0>>1,1>>0
            invoke    _FormatText,esi,@dwBytesRead,@hFileNew
        .endw
.................

用while语句来循环阅读文件,当阅读完文件后,@dwBytesRead为0, 取反后为1, 跳出循环,另外,当@dwBytesRead
不为0时,设置为0, 这是reafIle()的前置要求,所以只有用这语句才能更好地实现。如果谁能更详细更准确地解读这语句,请让我们分享一下。
搜索更多相关主题的帖子: 取反 语句 条件 循环 逻辑 
2020-10-06 15:55
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:11
帖 子:337
专家分:2462
注 册:2016-5-15
得分:5 
楼主用心,这个分享不错.
嗯,代码其实也有风格,有些人喜好精简,有些人醉心技巧.
没有注解,看别人的代码有时会get不到其用意.
比如这个,也不一定非这样写不可,把变量初始化放在回圈最前,简单比较传回值0则离开,对初学者可能更好理解.

2020-10-07 19:43
tigerdown
Rank: 1
等 级:新手上路
帖 子:63
专家分:3
注 册:2017-8-21
得分:0 
回复 2楼 Valenciax
确实如此,另外面对繁多的汇编指令,运用起来总觉得有点力不从心,你是否能推荐一本类似指令大全的书,能让程序员快速查询,谢谢了。
2020-10-08 06:09
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:11
帖 子:337
专家分:2462
注 册:2016-5-15
得分:0 
书倒不大看,基本指不外那几十条,不用刻意记,多用了就记得.
下面是x86的全部指令集,速看一遍,知道一个大概就可以了,碰到须用到的再去查一下用法.
https://www.

至于win32那些高阶的伪指令就更少,用到的找一就是.
https://docs.
收到的鲜花
  • tigerdown2020-10-08 16:40 送鲜花  1朵   附言:很有用,谢了。
2020-10-08 14:10
sssooosss
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:3
帖 子:664
专家分:1115
注 册:2019-8-27
得分:0 
共同学习
2021-09-28 08:58
自由而无用
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:61
专家分:1456
注 册:2021-8-9
得分:0 
https://docs.(v=msdn.10)

// Attempt a synchronous read operation.
bResult = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead, NULL) ;
// Check for end of file.
if (bResult &&  (nBytesRead == 0) )
{
   // you are at the end of the file.
}

[此贴子已经被作者于2021-9-28 09:31编辑过]

2021-09-28 09:29



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-503361-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.144167 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved