Разница между Unsigned Int и Signed Int в C
Целые числа обычно хранятся в виде 32-битных значений, но в некоторых средах они могут содержать 16-битные значения (или даже другие числа, как правило, произведение двух степеней). Например, давайте рассмотрим 4-битные целые числа. Они небольшие, но могут помочь проиллюстрировать точку зрения. Signed int может представлять отрицательные значения, а unsigned int может представлять только неотрицательные целые значения.
Для каждого значения, которое больше INT_MAX и меньше INT_MIN , мы можем столкнуться с разрывом, т. е. мы можем получить неожиданные результаты, если используем целое число со знаком. Но для целочисленных типов без знака разрывность будет только очень большим значением, чем INT_MAX , и очень меньшим значением, чем INT_MIN .
Мы можем видеть разрыв целочисленных значений со знаком, т. Е. Целочисленные значения со знаком получают ошибку переполнения int, как показано в приведенной ниже программе.
Приведенная выше программа напечатает -1 в качестве вывода, потому что это будет вне допустимого диапазона.
Но та же вышеприведенная программа будет работать для значений без знака:
Разница между Signed Int и Unsigned Int
Подписано | Целое без знака |
---|---|
Целое число со знаком может хранить отрицательные значения. | Целочисленные значения без знака могут хранить только положительные значения. |
Целое число со знаком может содержать значения от -2 32/2 – 1 (-2147483648) до 2 32/2 – 1 (2147483647). | 32-битное целое число без знака может хранить только положительные значения от 0 до 2 32 -1 ( 4294967295 ) |
Целое число со знаком может вызвать ошибку переполнения при использовании в программе с большими значениями. | Целое число без знака никогда не вызывает ошибку переполнения, потому что, если результат больше, чем наибольшее значение типа целого числа без знака, значение уменьшается по модулю наибольшего числа плюс один, который может быть представлен как целое число без знака. |