整型字面值(常量)是显式书写的常量,如1234。——(我真没看懂这个定义)
C和C++都能以三种不同的计数方式来书写整数。他们基数不同,用前一或两位来标识数字常量的基数。(或者说是进制?)
①十进制:基数为10。 第一位是1~9。例如11他就是十进制的11;
②八进制:基数为8(逢8进一)。第一位是0,例如033,是十进制的27;
③十六进制:基数是16(逢16进一)。第一位是0X或者0x,例如0X11,是十进制的17(1*16+1)。
例如:
#include <iostream> using namespace std; int main() { int a = 111; int b = 0111; //b为八进制的0111 int c = 0x111; //c为十六进制的0x111 cout << "a= " << a << endl; //显示a的结果 cout << "b= " << b << endl; //显示b的结果(注:转为十进制显示) cout << "c= " << c << endl; //显示c的结果(注:转为十进制显示) system("pause"); return 0; }
其输出为:
a= 123 b= 83 c= 291
具体计算为:
a=123没什么好说的;
b=1*64+2*8+3*1=73;//第一位数字1要乘以8的二次方,第二位数字2乘以8的一次方,第三位数字3乘以8的0次方(即1)。如果是四位,则第一位要乘以8的三次方(512)
c=1*256+2*16+3*1=273; //第一位数字1要乘以16的二次方,第二位数字2乘以16的一次方,第三位数字3乘以16的0次方(即1)。
即八进制和十六进制在计算的时候,其换算成十进制的方法是从右往左数每一个数字,分别乘以8(或16)的x-1次方(x为从右往左的位数,第一位x=1,第二位x=2),然后相加求和则为十进制
PS:
(1)无论是显示的或者输入的数字是八进制十进制十六进制,反正在内存里都以二进制来存储(0和1),所以并不会省内存。
(2)无论是哪个进制,程序都一样能读懂,所以没必要在程序非要把十六进制的转为十进制来看或者输入(程序能看懂就ok了)。
(3)如果以十六进制或者八进制来显示值的话,可以用cout的一些特殊特性。在头文件iostream里面,提供了控制符endl用于重起一行。还提供了dec,hex,oct分别用于指示cout以十进制(dec)、八进制(oct)和十六进制(hex)来显示整数。如代码:
#include <iostream> using namespace std; int main() { int a = 123; int b = 0123; //b为八进制的0123 int c = 0x123; //c为十六进制的0x123 cout << "a= " << a << endl; //显示a的结果 cout << "b= " << b << endl; //显示b的结果(注:转为十进制显示) cout << "c= " << c << endl; //显示c的结果(注:转为十进制显示) cout << endl; cout << hex; //告诉程序你应该以十六进制(hex)方式显示整数 cout << "a= " << a << " ←这里以十六进制的方式显示a" << endl; //显示a的结果(注:转为十六进制显示) cout << oct; //告诉程序你应该以八进制(oct)的方式显示整数 cout << "a= " << a << " ←这里以八进制的方式显示a" << endl; //显示c的结果(注:转为十进制显示) cout << dec; //告诉程序你应该以十进制(dec)的方式显示整数 cout << "a= " << a << " ←这里以十进制的方式显示a" << endl; //显示a的结果 system("pause"); return 0; }
输出结果为:
a= 123 b= 83 c= 291 a= 7b ←这里以十六进制的方式显示a a= 173 ←这里以八进制的方式显示a a= 123 ←这里以十进制的方式显示a 请按任意键继续. . .
注意:
①八进制那里的显示,前面没有0。但是输入的时候要加0,不然程序以为你输入的是十进制。同样,十六进制前面,也没有0x。至于如何让他以有的方式来显示,(我还不知道……)
②cout<<hex; 并不会显示任何东西,只是单纯的告诉编译器,以什么方式显示数字。另外,因为标识符hex存在于命名空间std中,因此,变量名不能用hex,除非你不用using namespace std; 这行命令。另外,也只有用了这行命令,你才能简写hex,dec,oct。否则你就要用std::hex , std::dec , std::oct 等。