Оператор Swift побитовое НЕ (~) инвертирует все биты в числе.
В документации приведен пример:
let initialBits: UInt8 = 0b00001111
let invertedBits = ~initialBits // equals 11110000
И я могу подтвердить это, напечатав String:
print(String(invertedBits, radix: 2)) // equals 11110000
Учитывая это logi c, я ожидал бы ~0 to equal 1
и ~1 to equal 0
. Однако при печати их, как я делал выше, печатается что-то неожиданное:
print(String(~0b1, radix: 2)) // equals -10
print(String(~0b0, radix: 2)) // equals -1
При использовании я вижу что-то другое:
print(String(0b100 & ~0b111, radix: 2)) // equals 0 just as I would expect 100 & 000 to equal 000
но
print(String(~0b111, radix: 2)) // equals -1000
~0b111
похоже, действует как 0b000
, но печатается как -1000
Что здесь происходит?