十进制数
十进制数,就是以10为基数的计数系统,数字的书写方式是基于 10 的幂数。例如,2398就是21000+3100+910+81,其中,计数系统的第一位幂数一定是0次方,向左依次递增,因为这种数字表示法是基于 10 的幂,所以将它称作基数为 10 的表示法或十进制表示法。可以用任何数作基数。
八进制数
八进制数,即以8为基数的计数系统,每一位是8的幂数,C++用前缀 0 来表示八进制表示法。也就是说,0177 是一个八进制值。可以用 8 的幂来找到对应的十进制值。
十六进制数
十六进制数是基于 16 的幂的。这意味着十六进制的 10 表示 16 + 0,即 16。为表示 9-16 值,需要其他一些数字,标准的十六进制表示法使用字母 a-f。C++接受这些字符的大写和小写版本表
十六进制 十进制
a 或 A 10
b 或 B 11
c 或 C 12
d 或 D 13
e 或 E 14
f 或 F 15
C++使用 0x 或 0X 来指示十六进制表示法。因此 0x2B3 是一个十六进制值,可使用 16 的幂来得到对应的十进制值。
二进制数
不管是使用十进制、八进制,还是十六进制表示法来书写整数,计算机都将它存储为二进制值(即基数为 2)。二进制表示法只使用两个数字——0 和 1。例如,10011011 就是二进制数。但 C++没有提供二进制表示法来书写数字的方式。二进制数是基于 2 的幂。二进制表示法与计算机内存完全对应,在内存中,每个单元(位)都可以设置成开或关。只是将关表示为 0,将开表示为 1。内存通常是以字节为单位组织的,每个字节包含 8 位,字节中的位被编号,对应于相关的2 的幂。这样,最右侧的位编号为 0,然后是 1,依此类推。
二进制和十六进制
十六进制表示法常用于提供更为方便的二进制数据(如内存地址或存储位标记设置的整数)视图。这样做的原因是,每个十六进制位对应于 4 位。
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111
要将十六进制值转换为二进制,只需将每个十六进制位替换为相应的二进制数即可。例如,十六进制0xA4 对应于二进制数 10100100。同样,可以轻松地将二进制值转换为十六进制,方法是将每 4 位转换为对应的十六进制位。例如,二进制值 10010101 将被转换为 0x95。
小知识
cout默认以十进制输出整数,而iostream提供了一个非常银杏的操作,提供了dec,hex,oct分别用于指示cout以十进制,十六进制和八进制格式显示整数
#include <iostream>
using namespace std;
int main()
{
int chest = 42;
int waist = 42;
int inseam = 42;
cout << "Monsieur cuts a striking figure!" << endl;
cout << "chest = " << chest << " (decimal for 42)" << endl;
cout << hex;
cout << "waist = " << waist << " (hexadecimal for 42)" << endl;
cout << oct;
cout << "inseam = " << inseam << " (octal for 42)" << endl;
return 0;
}
输出