Я видел эти упоминания в контексте C и C++, но в чем разница между подписанными и неподписанными переменными?В чем разница между подписанными и неподписанными переменными?
ответ
Подписанные переменные, такие как целые числа будут позволяют представлять числа как в положительном и отрицательном диапазонах.
неподписанных переменные, такие как целые числа без знака, будет только позволяют представлять числа в положительном.
Беззнаковые и подписанные переменные одного и того же типа (например, int
и byte
) оба имеют один и тот же диапазон (диапазон 65,536 и 256 номеров, соответственно), но без знака может представлять большее число величину, чем соответствующий подписанный с переменной ,
Например, unsigned byte
может представлять значения от 0
к 255
, в то время как signed byte
может представлять -128
к 127
.
Страница Википедии на Signed number representations объясняет разницу в представлении на уровне бит, а на странице Integer (computer science) представлена таблица диапазонов для каждого целочисленного типа с подписью/без знака.
Положительные числа больше нуля. Подписанные номера, по крайней мере, на C, могут использовать знаковый бит, а не представление комплемента, поэтому не имеют того же диапазона, что и без знака, из-за повторного +/- ноль. Если вы говорите, что int - 16 бит, скажем, платформа; большинство современных систем - 32 или 64 бит. –
Подписанные переменные используют один бит, чтобы указать, являются ли они положительными или отрицательными. Неподписанные переменные не имеют этого бита, поэтому они могут хранить большие числа в одном и том же пространстве, но только неотрицательные числа, например. 0 и выше.
Для более: Unsigned and Signed Integers
Неподписанные переменные могут быть только положительными, поскольку они не имеют возможности указать, что они отрицательные.
Эта способность называется «знаком» или «битом подписания».
Побочным эффектом является то, что без бита подписи у них есть еще один бит, который может использоваться для представления числа, удваивая максимальное число, которое он может представлять.
Подписанные переменные могут быть 0, положительными или отрицательными.
Неподписанные переменные могут быть 0 или положительными.
Необязательные переменные используются иногда потому, что для представления фактического значения могут использоваться другие биты. Предоставление вам большего диапазона. Также вы можете убедиться, что отрицательное значение не будет передано вашей функции, например.
неподписанных переменные являются переменные, которые внутренне представлены без математического знака (плюс или минус) может хранить «ноль» или только положительными значениями. Скажем, неподписанная переменная равна n бит, то она может представлять значения 2^n (2 мощности n) от 0 до (2^n -1). С другой стороны, подписанная переменная «теряет» один бит для представления знака, поэтому он может хранить значения от - (2^(n-1) -1) до (2^(n-1)), включая ноль.Таким образом, , подписанная переменная, может хранить положительные значения, отрицательные значения и ноль.
PS:
Внутренне, математический знак может быть представлена в своей форме дополнения, форме дополнения до двух или знакового бита (например: 0 -> +, 1-> -)
Всех этих методов эффективно разделите диапазон представляемых значений на n бит (2^n) на три части, положительные, отрицательные и нулевые.
Это всего лишь мои два цента.
Надеюсь, это поможет.
неподписанных используется, когда ур значение должно быть положительным, не отрицательное значение здесь, если подписан Int диапазоне -32768 до +32767 если беззнаковое для диапазона INT 0 до 65535
Хотя обычно не упоминается как " sign bit ', двоичные значения, которые мы обычно используем, не имеют истинного бита знака.
Большинство компьютеров используют арифметику с двумя дополнениями.Отрицательные числа создаются путем принятия one's-дополнение (переворачивать все биты) и добавив к нему один:
5 (decimal) -> 00000101 (binary)
1's complement: 11111010
add 1: 11111011 which is 'FB' in hex
Поэтому подписанные байты имеют значение от -128 до +127 вместо -127 до +127:
1 0 0 0 0 0 0 0 = -128
1 0 0 0 0 0 0 1 = -127
- - -
1 1 1 1 1 1 1 0 = -2
1 1 1 1 1 1 1 1 = -1
0 0 0 0 0 0 0 0 = 0
0 0 0 0 0 0 0 1 = 1
0 0 0 0 0 0 1 0 = 2
- - -
0 1 1 1 1 1 1 0 = 126
0 1 1 1 1 1 1 1 = 127
(добавить 1 до 127 дает :)
1 0 0 0 0 0 0 0
, который мы видим в верхней части этой диаграммы -128.
Если у нас был правильный бит знака, диапазон значений будет таким же (например, от -127 до +127), потому что один бит зарезервирован для знака. Если наиболее значащего бита бит знака, мы имеем:
5 (decimal) -> 00000101 (binary)
-5 (decimal) -> 10000101 (binary)
Самое интересное в данном случае мы имеем как нулевой, так и отрицательный ноль:
0 (decimal) -> 00000000 (binary)
-0 (decimal) -> 10000000 (binary)
Мы не имеем -0 с дополнением дополнительного кода; что будет -0 -128 (или быть более общим, больше, чем наибольшее положительное значение). Однако мы делаем с его дополнением; все 1 бит отрицательный 0.
Математически, -0 равно 0. Я смутно помню компьютер, где -0 < 0, но я не могу найти здесь никаких ссылок.
Большое спасибо! Я был очень смущен, почему это -128 до 127 для подписанного байта, а не от -127 до 127. Этот ответ требует больше голосов! –
Это может быть не точное определение, но я приведу вам пример: Если вы хотите создать случайное число, берущее его из системного времени, здесь использование переменной без знака полезно, поскольку существует большая область для случайных числа в виде подписанных чисел дают как положительные, так и отрицательные числа. Поскольку системное время не может быть отрицательным, мы используем неподписанную переменную (только положительные числа), и мы имеем более широкий диапазон случайных чисел.
- 1. Разница между подписанными и неподписанными 16-битными BCD?
- 2. Сортировка между подписанными и неподписанными нулями C++
- 3. Различия в Android между подписанными и неподписанными файлами .apk?
- 4. В чем разница между переменными?
- 5. Как работают преобразования между подписанными, неподписанными и плавающими типами?
- 6. В чем разница между JWT и подписанными куки?
- 7. Разница между неподписанными символами char и char
- 8. Разница между подписанными байтов и четности байтов
- 9. В чем разница между этими переменными PHP?
- 10. В чем разница между этими переменными PHP
- 11. Разница между постоянными переменными и глобальными переменными
- 12. Разница между переменными привязками и переменными?
- 13. В чем разница между локальными переменными, переменными экземпляра, глобальными переменными и переменными класса?
- 14. В чем разница между переменными local и экземпляра в Java
- 15. В чем разница между статическими и динамическими переменными в C#?
- 16. В чем разница между указателями и глобальными переменными в C?
- 17. В чем разница между литералами и переменными в Python?
- 18. В чем разница между переменными в PHP4 и PHP5?
- 19. В чем разница между макроконстантами и постоянными переменными в C?
- 20. В чем разница между глобальными переменными и #define в с
- 21. Проблемы с манипуляцией битами с подписанными и неподписанными целями, XNOR
- 22. Проектирование системы нумерации с неподписанными и подписанными ints
- 23. В чем разница между параметрами интеллектуального класса и интеллектуальными переменными
- 24. py2app- В чем разница между переменными «includes» и «packages»?
- 25. В чем разница между переменными среды USER и USERNAME?
- 26. В чем разница между перечислениями и конечными переменными?
- 27. В чем разница между переменными «Pentaho DI» и «полями»?
- 28. В чем разница между переменными TARGET_ARCH и TARGET_MACH?
- 29. В чем разница между чтением переменных запроса и переменными тела?
- 30. Квалификация кода - сравнение между значениями, подписанными и неподписанными, в qsort libc.
Я думал, что мы предполагаем, что в программировании по умолчанию, а не при маркировке не связанных с программированием? –
Так и я. Я нашел довольно много перестановок при программировании. Интересно, почему? – batbrat
Вопрос относится к конкретному аспекту программирования в целом. – Sam152