Witam.
Czy jest ktoś w stanie wytłumaczyć jak obliczyć binarne (8bit) wartości uzyskane w wyniku wykonania operacji w C?
Np.
1<<5|1<<4
0xFF^1
0xFE<<7&0xFE<<6
Pozdrawiam
Wątek przeniesiony 2017-02-15 17:41 z C/C++ przez kq.
Witam.
Czy jest ktoś w stanie wytłumaczyć jak obliczyć binarne (8bit) wartości uzyskane w wyniku wykonania operacji w C?
Np.
1<<5|1<<4
0xFF^1
0xFE<<7&0xFE<<6
Pozdrawiam
1<<5|1<<4
<@KrzaQ> cxx --precedence
1<<5|1<<4
<+cxx>(1<<5)|(1<<4)
1
10 to 0000 0001
2
(a) 1<<5
to 0010 0000
2
(b) 1<<4
to 0001 0000
2
Wobec tego wynik działania a|b
to 0011 0000
2
0xFF^1
0xFF
16 to 1111 1111
2
1
10 to 0000 0001
2
Wobec tego wynik działania xor to 1111 1110
2
0xFE<<7&0xFE<<6
<@KrzaQ> cxx --precedence
0xFE<<7&0xFE<<6
<+cxx>(0xFE<<7)&(0xFE<<6)
0xFE
16 to 11111110
2
(c) 0xFE<<6
to 0011 1111 1000 0000
2
(d) 0xFE<<7
to 0111 1111 0000 0000
2
Wobec tego wynik działania c&d
to 0011 1111 0000 0000
2
Mógłbyś wytłumaczyć dlaczego dodałeś siedem zer przed jedynką przy zamianie z 10 na 2?
1
10 to0000 0001
2
(a)
1<<5
to0010 0000
2
Pewnie. 00000001 to to samo co 0000001, 000001, 00001, 0001, 001, 01 i 1. Zera z lewej strony możesz dopisywać w nieskończoność.
Wyrównałem do 8 i 16 cyfr bo tyle najczęściej mają typy odpowiadające bajtowi i słowu.