NSInteger типы - PullRequest
       12

NSInteger типы

5 голосов
/ 07 февраля 2011

Я хотел бы знать, в чем разница между целым числом 16, целым числом 32 и целым числом 64 и разницей между целым числом со знаком и целым числом без знака (NSInteger и NSUInteger)

Ответы [ 4 ]

11 голосов
/ 07 февраля 2011

Я не уверен, какие именно типы вы подразумеваете под "Integer 16", "Integer 32" и "Integer 64", но обычно эти числа относятся к размеру в битах целочисленного типа.

Разница между целым со знаком и без знака - это диапазон значений, которые он может представлять.Например, 16-разрядное целое число со знаком с двумя дополнениями может представлять числа от -32 768 до 32 767.16-разрядное целое число без знака может представлять значения в диапазоне от 0 до 65 535.

Для большинства компьютеров, используемых сегодня, целое число со шириной n может представлять значения [-2 n -1 , 2 n -1 ) и целое число без знака ширины n может представлять значения [0,2 п ** 1020).

5 голосов
/ 08 февраля 2011

NSInteger и NSUInteger являются пользовательскими целочисленными типами данных Apple.Первый подписан, а второй не подписан.В 32-битных сборках NSInteger является typedef'd как int, в то время как в 64-битных сборках он typedef'd как long.NSUInteger - это typedef'd как unsigned int для 32-битных и unsigned long для 64-битных.Типы со знаком охватывают диапазон [-2 ^ (n-1), 2 ^ (n-1)], где n - значение бита, а типы без знака - диапазон [0, 2 ^ n].

Когдакодирование для отдельной автономной программы с использованием NSInteger или NSUInteger считается лучшей практикой для защиты от изменений битов платформы.Это не лучшая практика при работе с данными фиксированного размера, такими как двоичные форматы файлов или работа в сети, поскольку требуемая ширина поля определяется ранее и постоянна независимо от уровня бита платформы.Именно здесь используются типы фиксированного размера, определенные в stdint.h (то есть uint8_t, uint16_t, uint32_t и т. Д.).

1 голос
/ 07 февраля 2011

Посмотрите на Основные типы данных .NInteger и NSUInteger и typedef для int и unsigned int.

Из википедии

В вычислениях представления чисел со знаком необходимы для кодирования отрицательных чисел в двоичных системах счисления

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

1 голос
/ 07 февраля 2011

Без знака против целого числа со знаком -

Без знака обычно используется, когда переменные не могут принимать отрицательные числа.Например, при циклическом просмотре массива его всегда полезно / читаемо, если переменная индекса массива имеет значение unsigned int и проходит через весь массив.

С другой стороны, если переменная тоже может иметь отрицательные числазатем объявите переменную со знаком int.Целочисленные переменные подписаны по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...