Как выполнить декремент байта равным 0 в Python?
Имеется кусок кода на Python:
>>> bt2 = bytearray(2) >>> bt2[0] -= 1 Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: byte must be in range(0, 256) >>> bt2[1] -= 1 Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: byte must be in range(0, 256)
Для меня это неожиданное поведение. Ввиду того, что у меня есть опыт разработки на языке ассемблера архитектуры x86-64, я ожидаю, что при уменьшении байта равным 0x0 на 1 получу значение 0xFF. А если увеличу байт равным 0xFF на 1, то получу 0x0. Но вместо этого вижу брошенное ValueError
.
У меня два вопроса:
- Есть ли в
Python
возможность эмулировать "байты", то есть при декременте 0x0 получить 0xFF ? - Почему в
Python
подобное поведение?
Можно воспользоваться numpy
import numpy as np bt2 = np.zeros(2, dtype=np.uint8) print(bt2) # [0 0] bt2[0] -= 1 print(bt2) # [255 0] bt2[1] -= 1 print(bt2) # [255 255] bt2[0] += 1 print(bt2) # [ 0 255] bt2[1] += 1 print(bt2) # [0 0] bt2 = bytearray(bt2) print(bt2) # bytearray(b'\x00\x00')