ingfa_1981
Конкретно не понятно что за тип имеет
0x3f
0x1 итд. итп.
Тип int. Это шестнадцатеричная форма записи целого числа. Например, 16 == 0x10 .
ingfa_1981
зачем смещают вправо (tmp >> 8 & 0x3f) почему именно на это число 8 и применяют & – битовый оператор И?
По приоритетам операции идут так:
От высокого приоритета к низкому
Так можно расставить скобки мысленно
tmp >> 8 & 0x3f
превращается в
(tmp >> 8) & 0x3f
Или вот эту берём
tmp >> 8 & 0x3f | 0x1 << 6
превращается в
((tmp >> 8) & 0x3f) | (0x1 << 6)
Ну, и дальше сами операции:
У тебя есть десятичное число 5. Если его перевести в двоичную форму, получится двоичное число 101. У тебя есть десятичное число 6. Если его перевести в двоичную форму, получится двоичное число 110.
И вот мы побитово применяем операции к этим двум числам:
AND:
5dec & 6dec = 101bin & 110bin = 100bin = 4dec
OR:
5dec | 6dec = 101bin | 110bin = 111bin = 7dec
RSHIFT:
5dec >> 1dec = 101bin >> 1dec = 10bin = 2dec
LSHIFT:
5dec << 1dec = 101bin << 1dec = 1010bin = 10dec
XOR:
5dec ^ 6dec = 101bin ^ 110bin = 011bin = 3dec
Дальше откуда появляются вот эти числа в шестнадцатеричном виде:
1 hex = 1 dec = 0001 bin
2 hex = 2 dec = 0010 bin
3 hex = 3 dec = 0011 bin
4 hex = 4 dec = 0100 bin
5 hex = 5 dec = 0101 bin
6 hex = 6 dec = 0110 bin
7 hex = 7 dec = 0111 bin
8 hex = 8 dec = 1000 bin
9 hex = 9 dec = 1001 bin
A hex = 10 dec = 1010 bin
B hex = 11 dec = 1011 bin
C hex = 12 dec = 1100 bin
D hex = 13 dec = 1101 bin
E hex = 14 dec = 1110 bin
F hex = 15 dec = 1111 bin
0x3f
0x3 hex = 0011 bin
0xf hex = 1111 bin
0x3f hex = 0011 1111 bin
0xff
0xf hex = 1111 bin
0xf hex = 1111 bin
0xff hex = 1111 1111 bin
0xabcd
0xa hex = 1010 bin
0xb hex = 1011 bin
0xc hex = 1100 bin
0xd hex = 1101 bin
0xabcd hex = 1010 1011 1100 1101 bin
Пример
tmp = 12345
out = tmp >> 12 & 0x23
print(out)
12345 dec = 0x3039 hex
0x3039
0x3 hex = 0011 bin
0x0 hex = 0000 bin
0x3 hex = 0011 bin
0x9 hex = 1001 bin
0x3039 hex = 0011 0000 0011 1001 bin
0x3039 hex >> 12 dec = 0011 0000 0011 1001 bin >> 12 dec = 0011 bin = 0x3 hex
0x3 hex & 0x23 hex
0x23
0x2 hex = 0010 bin
0x3 hex = 0011 bin
0x23 hex = 0010 0011 bin
0x3 hex & 0x23 hex = 0011 bin & 0010 0011 bin = 0000 0011 bin & 0010 0011 bin = 0011 bin = 0x3 hex = 3 dec
На экран выведется число 3.
tags: bitwise bin hex