Ваше значение не -5
, но -123
.
Вы не можете получить его с прямым присваиванием, потому что значение представляет собой Int со знаком и интерпретируется как 133
.
Чтобы присвоить отрицательное значение, используйте Int8(bitpattern:)
для преобразования значения из UInt8
в Int8
:
let signedInt = Int8(bitPattern: 0b10000101)
print(signedInt)
-123
-5
is 0b11111011
, который является дополнением 2 к 0b00000101
.
Чтобы сформировать дополнение 2, начните с двоичного шаблона для 5
:
0b00000101
, инвертирующего всебиты:
0b11111010
и добавление 1
:
0b11111011
Вы можете использовать UInt8(bitPattern:)
, чтобы найти представление числа:
let signedInt: Int8 = -5
print(String(UInt8(bitPattern: signedInt), radix: 2))
11111011