Некоторые распространенные примеры:
Число разрядов | Тип в C++[^1] | Максимально представимое |
---|---|---|
8 | unsigned char |
255 |
16 | unsigned short |
65535 |
32 | unsigned int |
4 294 967 295 |
64 | unsigned long long |
18 446 744 073 709 551 615 |
#include <iostream>
#include <climits>
using namespace std;
int main() {
cout << "unsigned char " << sizeof(unsigned char) * CHAR_BIT
<< "\n" << "unsigned short " << sizeof(unsigned short) * CHAR_BIT
<< "\n" << "unsigned int " << sizeof(unsigned int) * CHAR_BIT
<< "\n" << "unsigned long " << sizeof(unsigned long) * CHAR_BIT
<< "\n" << "unsigned long long "
<< sizeof(unsigned long long) * CHAR_BIT
<< endl;
}
Типовый вывод:
unsigned char 8
unsigned short 16
unsigned int 32
unsigned long 64
unsigned long long 64
Прямой код (11):
0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 |
Дополнительный код (-11):
1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 |
Сумма:
0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | |
1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | |
1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Поскольку представление 8-битное, старший бит результата отбрасывается. Остается
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
один бит отводится под “знаковый” разряд
максимально представимое в знаковом представлении в 2 раза меньше, чем в беззнаковом
По соглашению, в \(n\)-битном знаковом представлении, число \(1\underbrace{0\ldots0}_{n-1}\) считается отрицательным, однако его дополнительный код совпадает с прямым:
обратный код: \(0\underbrace{1\ldots1}_{n-1}\)
дополнительный код: \(0\underbrace{1\ldots1}_{n-1}+1= 1\underbrace{0\ldots0}_{n-1}\)
Число разрядов | Тип в C++ | Мин | Макс |
---|---|---|---|
8 | char |
-128 | 127 |
16 | short |
-32768 | 32767 |
32 | int |
-2 147 483 648 | 2 147 483 647 |
64 | long long |
-9 223 372 036 854 775 808 | 9 223 372 036 854 775 807 |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |