2015-07-28 13 views
9

Potrzebuję porównać dwie liczby całkowite za pomocą operatora Bit. Mam do czynienia z problemem, w którym muszę porównać dwie liczby całkowite bez użycia operatora porównania. Pomocnik bitowy może pomóc.Ale jak?Porównaj dwie liczby całkowite za pomocą operatora bitowego

Powiedzmy, że a = 4; b = 5;

Musimy pokazać a nie jest równe b. Ale, chciałbym rozszerzyć to dalej, powiedzmy, pokażemy, który jest większy. Tutaj b jest większy ..

+1

mógłbyś podać przykład, który opisuje swój problem? – SubOptimal

+2

AFAIK, jest to możliwe w językach (takich jak c), gdzie boolean jest reprezentowany jako int. Ale nie w java, ponieważ można uzyskać wartość boolowską tylko przy użyciu porównania. operatory bitów na int zawsze będą tylko skutkować int. – Codebender

Odpowiedz

9

Potrzebujesz co najmniej porównania do 0 i teoretycznie to jest to, co CPU robi dla porównania. na przykład

Equals można modelować jako ^ jako bity muszą być takie same, aby powrócić 0

(a^b) == 0 

czy to C można upuść == 0 jak to może być dorozumiana z

!(a^b) 

ale w Javie nie można przekonwertować int na boolean bez przynajmniej pewnego porównania.

Dla porównania zwykle wykonuje się odejmowanie, które jednak obsługuje przepełnienia.

(long) a - b > 0 // same as a > b 

odejmowanie jest taka sama jak dodawanie ujemny i ujemny jest taka sama jak ~ x + 1, dzięki czemu można zrobić

(long) a + ~ (long) b + 1 > 0 

upuścić +1 można zmienić na

(long) a + ~ (long) b >= 0 // same as a > b 

Można wdrożyć + jako serię operacji bit po bicie z >><<&| i ^, ale ja tego nie zadaję.

0

Korzystanie notacji binarnej uzupełnienie dwójkowe

int findMax(int x, int y) 
{ 
int z = x - y; 
int i = (z >> 31) & 0x1; 
int max = x - i * z; 
return max; 
} 

referencyjny: Here

+0

Sugerujesz, aby znaleźć sposób, aby uniknąć porównywania w pierwszej kolejności? –

+0

nie można znaleźć, jeśli 2 wartości są równe. – Codebender

+0

Tak, proszę pana, oto odpowiedź na drugą część: "Chciałbym jednak rozszerzyć to dalej, powiedzmy, pokażemy, które jest większe". bez porównania. –

Powiązane problemy