Тип unsigned
Тип unsigned в C++ является модификатором для целочисленных типов данных, таких как int, short, long и char. Он указывает компилятору, что переменная должна хранить только неотрицательные значения. Это достигается за счет того, что старший бит числа не используется для хранения знака, а полностью отводится под само значение. В результате диапазон допустимых значений сдвигается: минимальное значение становится 0, а максимальное примерно удваивается по сравнению со знаковым аналогом.
Например, обычный int обычно занимает 4 байта и хранит значения от -2147483648 до 2147483647. Тип unsigned int при том же размере хранит значения от 0 до 4294967295. Важно помнить, что при выходе за пределы допустимого диапазона происходит переполнение с циклическим переходом: после максимального значения следует 0, а перед 0 - максимальное значение.
Синтаксис
unsigned тип имя_переменной;
unsigned тип имя_переменной = значение;
Также можно использовать сокращенную запись без int, например unsigned, что эквивалентно unsigned int.
Пример
Объявим переменную типа unsigned int и выведем ее значение:
#include <iostream>
using namespace std;
int main()
{
unsigned int num = 42;
cout << num << endl;
return 0;
}
Результат выполнения кода:
42
Пример
Продемонстрируем циклическое переполнение при выходе за максимальное значение:
#include <iostream>
using namespace std;
int main()
{
unsigned char num = 255;
num = num + 1;
cout << static_cast<int>(num) << endl;
return 0;
}
Результат выполнения кода:
0
Пример
Покажем разницу между знаковым и беззнаковым типами при работе с отрицательными числами:
#include <iostream>
using namespace std;
int main()
{
int a = -1;
unsigned int b = a;
cout << a << endl;
cout << b << endl;
return 0;
}
Результат выполнения кода:
-1
4294967295