Witam.
Napisałem dla testu taki kod:
#include <iostream>
#define L_SH(x,y) ((x)<<(y))
#define R_SH(x,y) ((x)>>(y))
int main(){
std::cout<<"Enter math expression: \n";
std::cout<< (5 | 3) <<"\n"; // 0101 | 0011 = 0111 (7)
std::cout<< (5 & 3) <<"\n"; // 0101 & 0011 = 0001 (1)
std::cout<< (5 ^ 3) <<"\n"; // 0101 ^ 0011 = 0100 (4)
std::cout<< ~5 <<" "<< ~3 <<"\n"; // ~0101 ~0011 = 1010 (10) 1100 (12)
std::cout<< ~-5 <<" "<< ~-3 <<"\n\n"; // ?
std::cout<<"LEFT: 20 - 1, 2\n";
std::cout<< L_SH(20, 1) <<" "<< L_SH(20, 2) <<"\n\n"; // 10100 <<1 01000 (8) - 10100 <<2 10000 (16)
std::cout<<"RIGHT: 20 - 1, 2\n";
std::cout<< R_SH(20, 1) <<" "<< R_SH(20, 2) <<"\n\n"; // 10100 1>> 01010 (10) - 10100 2>> 00101 (5)
}
Mam taki output:
Enter math expression:
7 (or)
1 (and)
6 (xor)
-6 -4 (not +)
4 2 (not -)
LEFT: 20 - 1, 2 (bit shift)
40 80
RIGHT: 20 - 1, 2 (bit shift)
10 5
(to co w nawiasach dopisałem dla łatwiejszej orientacji)
O ile or, and, xor, not z dodatnim rozumiem, o tyle nie wiem dlaczego not z ujemnym daje wyniki 4, 2. Czy mógłby mi ktoś wyjaśnić jak mniej więcej powinna wyglądać treść tamtego komentarza? Dlaczego wyniki są takie, a nie inne?
Dodatkowo. Zdziwiło mnie kiedy przy komentowaniu lewego przesunięcia bitowego wychodziły mi te wyniki. Po włączeniu programu okazało się, iż byłem w błędzie i wyniki są prawidłowe. Czy mógłby mnie ktoś wyprowadzić z błędu?
Pozdrawiam.