В сравнении двух чисел мы обычно используем оператор " if ", который при истинности (по сути единица) выражения запускает код, который находится внутри, а при ложном пропускает этот код. Вроде всё просто сравнение, но как компьютер понимает что два числа равны или больше, или меньше и как работает этот оператор " if "?
В ассемблере есть такая команда CMP, которая сравнивает два числа, там же сравнивание идёт по следующему алгоритму:
CMP A, B
  1. Из A вычитается B
  2. Если результат равен нулю, то A=B
  3. Если числа равны, то устанавливается флаг ZF
То есть мы смотрим что находится в флаге ZF:
  1. Если ZF = 1, то числа равны
  2. Если ZF = 0, то числа НЕ равны
Это простой пример, ведь команда сравнивает только два числа. Теперь посмотрим на оператор if в Си.
	int a;
	int b;
	int c;
	a = 5;
	b = 5;
	c = 0;
	
	if ((a == 5) && (b == 5)) {
		c = 12;
	}
	else { c = 0; }
Логический знак && можно считать, как знак умножения. Мы можем в принципе преобразовать эту функцию в одну формулу:
c = 12 * (!(a - 5) * !(b - 5));
Знак восклицания работает следующим образом любое число кроме нуля преобразует в ноль, а ноль в единицу.
Но это лишь формула, которую я подогнал для данного сравнения и то сомнительно. Как же в программировании компилятор преобразует if и логические знаки? Где можно почитать об этом?

Принятый ответ

Почитай про boolean и как работают его операции. Он не связан с числовыми типами (кроме Си, но не будем трогать магию слабой типизации), советую почитать про типизацию и приведение типов в C++. Дальше можно переходить к тому, что такое int32/64, а дальше ieee float

Крайне не рекомендую объединять логические и численные операции - разбираться в этом потом очень больно, даже самому себе через пару месяцев
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
37
4 года назад
Отредактирован ScorpioT1000
0
Почитай про boolean и как работают его операции. Он не связан с числовыми типами (кроме Си, но не будем трогать магию слабой типизации), советую почитать про типизацию и приведение типов в C++. Дальше можно переходить к тому, что такое int32/64, а дальше ieee float

Крайне не рекомендую объединять логические и численные операции - разбираться в этом потом очень больно, даже самому себе через пару месяцев
Принятый ответ
0
28
4 года назад
Отредактирован PT153
0
Обычный goto. Если флаг 1, то goto в такой лейбл, если 0, то в другой. В ассемблере MIPS есть специальные функции сравнения.
2
19
4 года назад
2
Также прочитай про условные и безусловные переходы: jmp, ja, jb, je, jnz/jne и т.д.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.