Как я могу эффективно выполнить == с помощью бинарных операций?
Мне интересно найти булеву / арифметическую функцию, которая будет возвращать -1, если два значения совпадают, и 0, если они не совпадают, другими словами, операция ==. Я знаю, что это можно сделать с помощью логического НЕ, например:
! (АВ)
который будет равен -1 (= 111111111.... в двоичном виде), если A == B. Но проблема в том, что это компилируется в большой сдвиг вправо, например >> 31
что дорого Я надеялся найти двоичные инструкции с коротким циклом, которые могли бы достичь того же эффекта.
Как == компилируется, когда используется как R-значение, так же, как! (AB)?
1 ответ
Это поможет?
#include <stdio.h>
int compare (int a, int b) {
char res[] = { 0, 0, -1};
char *p = &res[2];
return p[(a - b) ^ (b -a)];
}
main() {
printf("\nans %d \n", compare(12435, 12435));
printf("\nans %d \n", compare(221, 12435));
printf("\nans %d \n", compare(-43221, 12435));
}
Кстати, вы можете использовать ^ B, чтобы получить 0 для равных