шестнадцатеричное целое число к целому в Objective C - PullRequest
0 голосов
/ 28 декабря 2011

Подобные вопросы уже задавались, но, пожалуйста, кто-нибудь может объяснить мне, почему этот код ...

NSInteger hexInt = 0x80000505;
NSLog(@"%d, %#x", hexInt, hexInt);

печатает -2147482363, 0x80000505, в то время как 0x80000505 равняется 2147484933, а - не -2147482363 ?Спасибо ...

1 Ответ

0 голосов
/ 28 декабря 2011

NSInteger определяется как int (typedef int NSInteger), и 2147484933 переполняет максимальное значение int (в 32-разрядных системах, где диапазон значений int составляет от -2,147,483,648 до +2,147,483,647), поскольку, как вы можете видеть, старший бит установлен в 0x80000505, поэтому 0x80000505 - отрицательное число.

...