C代码片段解释

C code snippets explanation

我正在尝试将以下 C 代码片段转换为汇编代码,但问题是我什至无法理解这些简单的 C 代码。我认为它们是以不正常的方式写的。所以我不能转移到组装。请帮助我

a = (a >= c);
b = (c < d) || (b > d);
a = (a != d) && (b != c)

看看 a>=c 那么它 return 是真的。所以 a=1 否则 a=0。 现在在第二种情况下,如果 c<d(c 小于 d )或 b>d(b 大于 d),其中任何一个为真 b=1。如果两者都为假 b=0。 如果 a 不等于 d 且 b 不等于 c,则 a=1 否则为 false(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

Note: if (A && B) and A is found to be 0 then B will not be checked. if (A || B) and A is found to be 1 then B will not be checked.

如果 B 是表达式,则不会按照上述信息执行。这叫做Short circuit evaluation.

它们是布尔表达式,return当为真时值为 1。

(a >= c) return如果 a >= c 则为 1,否则为 0。

如果 a 和 b 都不为零,a && b 也会 return 1

诸如 a>=c return 真 ( 1 ) 或假 ( 0 ) 之类的语句。

因此,在您的情况下,如果 a >= ca=(a>=c); 会将值 1 赋给 a,否则,它会将值 0 赋给 a

这也可以读作

if( a >= c )
  a = 1;
else
  a = 0;

接下来是b=(c<d)||(b>d);。由于我们有||,如果两个条件return中的任何一个为真则b赋值1,否则赋值0。即如果( c < d )( b > d )b 将被赋值 1,如果两个条件 return 都为假,则 b 被赋值为 0 。

现在这类似于 if 语句

if( ( c < d ) || ( b > d ) )
  b = 1;
else
  b = 0;

而对于 a=(a!=d)&&(b!=c),两个条件都必须 return 为真,a 才能得到值 1。也就是说,( a != d )( b != c ) 必须 return true 才能为 a 分配值 1。如果不满足这两个条件中的任何一个,则为 a 分配值 0。

这相当于

if ( ( a != d ) && ( b != c ) )
  a = 1;
else
  a = 0;

希望你现在明白了。 :)