Беззнаковые целые в C++
Целое число можно сделать беззнаковым.
Для этого перед типом пишут слово unsigned.
Беззнаковое число бывает только нулем
и положительным. Отрицательных значений
у него нет.
Так делают, чтобы расширить диапазон возможных чисел. Беззнаковый тип занимает столько же байтов, сколько и тип со знаком. Но так как отрицательные числа мы не берем, то положительных сможем взять в два раза больше.
То есть разница проявляется в том, как мы интерпретируем те же байты - в зависимости от нашей интерпретации получается другой возможный дипазон. При этом диапазон не расширяется - количество возможных чисел будет такое же - просто другим будет набор этих чисел.
Для примера у типа
int верхняя граница около двух
миллиардов. У типа unsigned int
она примерно вдвое выше: до
4294967295. Число 3000000000
в int не входит, а в
unsigned int входит.
Беззнаковый тип берут и тогда, когда минус по смыслу числа не нужен. Количество штук, длина текста, номер элемента и размер в байтах не бывают отрицательными.
Вот таблица диапазонов беззнаковых чисел:
| Тип | Байты | Диапазон |
|---|---|---|
unsigned short
|
2
|
от 0 до 65535
|
unsigned int
|
4
|
от 0 до 4294967295
|
unsigned long
|
4 или 8
|
от 0 до верхней границы этого размера
|
unsigned long long
|
8
|
от 0 до 18446744073709551615
|
В каком диапазоне изменяются числа типа
unsigned short?
В каком диапазоне изменяются числа типа
unsigned int?
В каком диапазоне изменяются числа типа
unsigned long?
В каком диапазоне изменяются числа типа
unsigned long long?
Есть число -1. Помещается ли оно в диапазон
типа unsigned short?
Есть число 70000. Помещается ли оно в диапазон
типа unsigned short?
Есть число 3000000000. Помещается ли оно в диапазон
типа unsigned int?
Есть число -5. Помещается ли оно в диапазон
типа unsigned int?
Есть число -1. Помещается ли оно в диапазон
типа unsigned long long?