Бит и байт
Суть
Бит — минимальная единица информации: 0 или 1. Байт — минимальная адресуемая единица памяти; на всех современных платформах, включая Apple, это 8 бит, то есть 256 (2⁸) возможных значений. Всё, что хранит и передаёт программа — числа, строки, картинки, указатели, — это последовательности байтов, а тип говорит компилятору, как эти байты интерпретировать.
В Swift
Int8/UInt8— ровно один байт,Int/UInt— размер слова (8 байт на 64-битной системе),Int32,Int64— фиксированные.MemoryLayout<T>.sizeпоказывает, сколько байт занимает значение.- Битовые операции:
&,|,^,~, сдвиги<</>>. На них строятсяOptionSet([.alignLeft, .wrap]— это биты в одном целом), флаги, маски, хеши. - Литералы:
0b1010(двоичный),0xFF(шестнадцатеричный),1_000_000.
let a: UInt8 = 0b1010_0101 // 165
print(UInt8.max) // 255
print(MemoryLayout<Int>.size) // 8 на 64-битной платформе
print(MemoryLayout<Bool>.size) // 1 — даже один флаг занимает целый байт
let flags: UInt8 = 0b0000_0101
print(flags & 0b100 != 0) // true — третий бит установлен
print(flags << 1) // 10 — сдвиг влево = умножение на 2
print(Int8(bitPattern: 0xFF)) // -1 — те же 8 бит, другая интерпретация
На что смотрит интервьюер
- Понимаете ли вы, что знак числа — это соглашение об интерпретации (дополнительный код), а не свойство байтов.
- Знаете ли, что
Intзависит от платформы, а для сети и файлов нужны типы с фиксированной шириной и явный порядок байтов (bigEndian/littleEndian). - Связь с памятью: 1 КБ = 1024 байт, картинка 1000×1000 RGBA занимает 4 МБ в памяти независимо от размера PNG-файла.