我正在尝试将以下C代码片段转换为汇编,但问题是我甚至无法理解这些简单的C代码。我认为它们是以异常方式编写的。所以我只是无法转移到装配。请帮帮我
a = (a >= c);
b = (c < d) || (b > d);
a = (a != d) && (b != c)
答案 0 :(得分:2)
查看a>=c
然后返回true。所以a = 1,否则a = 0。
现在在第二种情况下,如果c<d
(c小于d)或b>d
(b大于d),则其中任何一个都为真b = 1。如果两者都是假b = 0。
如果a不等于d且b不等于c则a = 1,否则为假(0)。
A && B = 1 if A!=0 and B!=0
= 0 if A=0 or B=0 or (A=0 and B=0)
A || B = 1 if A!=0 or B!=0
= 0 if A=0 and B=0
注意:
if (A && B)
和A被发现为0,那么B将不会被检查。if (A || B)
和A被发现为1,那么B将不被检查。
如果B是表达式,那么将不会按照上述信息执行。这称为Short circuit evaluation
。
答案 1 :(得分:2)
a>=c
之类的语句返回true(1)或false(0)。
因此,在您的情况下,如果a=(a>=c);
,a
会将值1分配给a >= c
,否则,它会将0分配给a
。
这也可以理解为
if( a >= c )
a = 1;
else
a = 0;
接下来是b=(c<d)||(b>d);
。由于我们有||
,如果两个条件中的任何一个返回true,则b被赋值为1,否则赋值为0.这就是( c < d )
或( b > d )
,b
将被赋值为1,如果两个条件都返回false,则b
被赋值为0。
现在这类似于if语句
if( ( c < d ) || ( b > d ) )
b = 1;
else
b = 0;
对于a=(a!=d)&&(b!=c)
,两个条件都必须为a
返回true才能获得值1.也就是说,( a != d )
和( b != c )
都必须为{返回true {1}}要分配值1.如果不满足这两个条件中的任何一个,则为a
分配值0.
这相当于
a
希望你现在明白。 :)
答案 2 :(得分:0)
它们是布尔表达式,当为true时返回值1.
如果a> = c,则(a&gt; = c)返回1,否则返回0。
也是&amp;&amp;如果a和b都非零,则b将返回