В Swift я не могу создать отрицательное число в двоичном - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь присвоить -5 для SignInt, но получаю ошибку:

Целочисленный литерал '133' переполняется при сохранении в 'Int8'

let signedInt: Int8 = 0b10000101
print(signedInt)
print(String(signedInt, radix: 2))

image

1 Ответ

0 голосов
/ 30 октября 2019

Ваше значение не -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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...