(二十七)整型字面值(常量)——多种进制

简介:

整型字面值(常量)是显式书写的常量,如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 等。

 

 


目录
相关文章
|
1月前
|
编译器 C语言
C语言中整数如何自动转换为浮点数
C语言中整数如何自动转换为浮点数
60 0
|
2月前
整数常量
整数常量。
13 0
|
6月前
|
C语言
C语言之将十进制整数转换为任意进制整数
C语言之将十进制整数转换为任意进制整数
149 0
|
7月前
|
C语言
C语言:截断+整型提升+算数转换练习
截断+整型提升+算数转换练习
41 0
|
30天前
|
存储 Shell C语言
【C/C++ 字符串与整型转换函数】探索C语言中的字符串和整型之间的转换函数
【C/C++ 字符串与整型转换函数】探索C语言中的字符串和整型之间的转换函数
15 0
|
3月前
|
编译器 C语言 C++
整形提升和算数转换
整形提升和算数转换
18 0
|
5月前
|
C语言
C语言:二进制、八进制、十六进制整数的书写及输出
C语言:二进制、八进制、十六进制整数的书写及输出
|
8月前
|
C++
|
9月前
|
C语言 索引
操作符续(整型提升与算术转换)
操作符续(整型提升与算术转换)
51 0
|
11月前
|
C语言
C语言:数据类型之整形(二)整形的属性
C语言:数据类型之整形(二)整形的属性