File size: 1,032 Bytes
06555b5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
import os
from struct import unpack
def random16() -> int:
return unpack("!H", os.urandom(2))[0]
def random32() -> int:
return unpack("!L", os.urandom(4))[0]
def uint16_add(a: int, b: int) -> int:
"""
Return a + b.
"""
return (a + b) & 0xFFFF
def uint16_gt(a: int, b: int) -> bool:
"""
Return a > b.
"""
half_mod = 0x8000
return ((a < b) and ((b - a) > half_mod)) or ((a > b) and ((a - b) < half_mod))
def uint16_gte(a: int, b: int) -> bool:
"""
Return a >= b.
"""
return (a == b) or uint16_gt(a, b)
def uint32_add(a: int, b: int) -> int:
"""
Return a + b.
"""
return (a + b) & 0xFFFFFFFF
def uint32_gt(a: int, b: int) -> bool:
"""
Return a > b.
"""
half_mod = 0x80000000
return ((a < b) and ((b - a) > half_mod)) or ((a > b) and ((a - b) < half_mod))
def uint32_gte(a: int, b: int) -> bool:
"""
Return a >= b.
"""
return (a == b) or uint32_gt(a, b)
|