2015-03-21 3 views
-1

Я пытаюсь преобразовать следующие фрагменты кода C в сборку, но проблема в том, что я даже не могу понять эти простые C-коды. Я думаю, что они написаны ненормально. поэтому я просто не могу перейти на сборку. помогите мнеC описания фрагментов кода

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

Это действительные выражения C. Не аномально. Вы запрограммировали на C раньше? – lurker

ответ

2

Посмотрите, если a>=c, тогда он вернется. Итак, 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 

Примечание: if (A && B) и А оказывается 0, то В не будут проверены. if (A || B) и A определено как 1, тогда B не будет проверяться.

если B - это выражение, которое не будет выполнено в соответствии с информацией, указанной выше. Это называется Short circuit evaluation.

0

Они являются булевыми выражениями и возвращают значение 1, когда true.

(a> = c) возвращает 1, если a> = c и 0, если нет.

Также & & б возвращает 1, если оба а и б не равны нулю

2

отчетность как a>=c возвращает истину (1) или ложь (0).

Так что в вашем случае a=(a>=c); присвоит значение 1, если aa >= 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((c < d) || (b > d)) 
    b = 1; 
else 
    b = 0; 

И a=(a!=d)&&(b!=c), оба условия должны вернуться верно для a, чтобы получить значение 1. То есть, как (a != d) и (b != c) должны возвращать верно для a которому присваивается значение 1. Если любое из этих двух условий не выполняется, то a присваивается значение 0.

Это эквивалентно

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

Надеюсь, вы понимаете, это сейчас. :)

Смежные вопросы