2014-09-14 2 views
1

Когда я использую побитовый оператор на быстрой площадке, 147 < < 24 дает мне 2,466,250,752. Тем не менее, запуск того же оператора на моем iPhone и печать результатов дает мне -1828716544. Почему он должен давать другой результат и как я могу это исправить?Побитовый оператор дает отличный результат на детской площадке

ответ

4

Это вопрос 32-битных и 64-разрядных целых чисел, потому что результат сдвиг влево << имеет тот же тип, что и его операнды.

Экспозиция использует 64-битную архитектуру, поэтому

147 << 24 = 0x0000000000000093 << 24 = 0x0000000093000000 = 2466250752 

На 32-битовое устройство 147 представляет собой 32-битный подписал целое число и, следовательно,

147 << 24 = 0x00000093 << 24 = 0x93000000 = -1828716544 

является отрицательным (бит знака равен 1).

Однако результат помещается в 32-битном беззнаковое целое число, так что это даст тот же результат на обеих архитектур:

let x = UInt32(147) << 24 // 2466250752 
Смежные вопросы