Как я могу эффективно выполнить == с помощью бинарных операций?

Мне интересно найти булеву / арифметическую функцию, которая будет возвращать -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 для равных

Другие вопросы по тегам