подписанный против неподписанного int в C - PullRequest
4 голосов
/ 27 сентября 2011

Я новичок в C и нуждаюсь в быстром разъяснении относительно целых чисел.

Когда вы приводите что-либо как int, то есть 32 бита, половина битов выделяется для отрицательных целых чисел. Таким образом, если вы знаете, что у вас всегда будут положительные целые числа, приведение чего-либо в виде беззнакового целого должно максимально увеличить ваши положительные биты и, таким образом, иметь больше смысла, когда вы знаете, что выходные данные всегда будут положительными. Это правда?

Спасибо!

Ответы [ 4 ]

9 голосов
/ 27 сентября 2011

half of the bits are allocated for negative integers Это утверждение неверно, один знак выделен знаку для обычных целых чисел.

Однако, вы правы в своем предположении. Если вы уверены, что число положительное, использование unsigned int позволит вам получить доступ к номеру в диапазоне [0,2 ^ 32), в то время как обычное int только разрешит только [- (2 ^ 31), 2 ^ 31- 1], поскольку вам не нужны отрицательные значения, это оставляет вас с менее положительными числами.

5 голосов
/ 27 сентября 2011

Не половина битов , просто один бит, который переводится в половину значений .Также не приведение , а декларирование : если вы произнесете что-то, что вы интерпретируете это, что не даст вам дополнительного диапазона, оно просто даст вам потенциально другое значение, чеморигинальный пользователь предназначен.

4 голосов
/ 27 сентября 2011

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

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

Особенно нужно быть осторожным при сравнении чисел без знака - многим циклам не удалось завершиться, поскольку значение обратного отсчета было без знака, и сравнение было для <0. </p>

0 голосов
/ 27 сентября 2011

Один бит используется для +/-, а не половина.Использование чисел без знака дает вдвое больший диапазон положительных значений по сравнению со знаком со знаком.

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