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

简介:

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

 

 


目录
相关文章
|
存储 编解码 数据库
基于人脸识别的智能门锁系统
基于人脸识别的智能门锁系统
533 0
|
NoSQL Ubuntu 网络安全
docker安装redis并允许远程访问
docker安装redis并允许远程访问
docker安装redis并允许远程访问
|
人工智能 分布式计算 搜索推荐
元宇宙:通往未来数字世界的入口
【10月更文挑战第27天】元宇宙,一个融合虚拟现实、增强现实、人工智能和区块链等技术的多维度数字世界,正成为连接现实与虚拟的桥梁。它不仅提供沉浸式的社交、娱乐和商业体验,还预示着数字时代的深刻变革,对经济、文化和社会产生深远影响。本文探讨元宇宙的定义、特征、关键技术及其未来影响。
|
NoSQL Java 应用服务中间件
线程不够用怎么办?
### 并发编程挑战与解决方案概览 - 多线程导致线程爆炸,浪费CPU及可能导致JVM崩溃。线程池缓解问题,但仍有阻塞IO的效率低下。 - 非阻塞IO(如servlet3.1/Tomcat)和事件驱动(Reactive/Future)减少线程使用,但学习曲线陡峭。 - 轻量级线程如Netty、Spring Flux和虚拟线程(Java Loom)提升性能,但普及尚需时日。Java21引入虚拟线程,有望成未来性能关键。
511 10
|
人工智能 安全 算法
构建安全壁垒:大模型私有化部署的技术挑战与解决方案
【10月更文挑战第16天】随着大数据和云计算的发展,人工智能大模型为企业带来竞争优势,但也引发了数据安全和隐私保护的挑战。大模型私有化部署,即将模型和数据部署在企业内部服务器上,成为了解决这些问题的有效途径。这不仅减少了数据泄露风险,还能根据企业需求定制模型,提高适用性和准确性。面对计算资源利用、模型训练加速和数据安全保障等技术挑战,企业可通过优化算法、硬件加速和加强数据安全措施来应对。私有化部署正逐步受到关注,为企业的安全与创新发展提供新动力。
831 3
农场养成种树种植游戏系统开发案例详细丨dapp农场养成种植种树游戏系统开发规则玩法/设计案例/功能逻辑/源码部署
  农场养成种树游戏(Farm simulation tree planting game)是一类模拟农场生活的游戏。在这种游戏中,玩家扮演农场主或农民的角色,通过种植和护理树木,以及进行相关的农业活动,来管理和发展自己的农场。
|
机器学习/深度学习 人工智能 自然语言处理
AI基础科普:揭开人工智能的神秘面纱
人工智能(Artificial Intelligence, AI)已经成为现代科技的热门话题,影响着我们的生活方方面面。从语音助手到自动驾驶汽车,AI正在以惊人的速度改变着世界。然而,对于许多人来说,AI仍然是一个模糊的概念。本文将通过通俗易懂的语言和丰富的图文,全面介绍AI的基础知识,帮助读者更好地理解这个激动人心的领域。
|
安全 网络协议 Linux
ip和端口介绍以及常用范围
ip和端口介绍以及常用范围
712 0
|
机器人 BI 数据格式
用八爪鱼RPA轻松实现员工社保管理,解放hr重复劳动!
八爪鱼rpa是一款强大的自动化工具,可以帮助企业实现员工社保管理的自动化。
|
存储 API 对象存储
带你读《存储漫谈:Ceph原理与实践》——3.2.6 未来展望
带你读《存储漫谈:Ceph原理与实践》——3.2.6 未来展望