C语言之进制转换

2023-11-12


一、基础知识

1.C语言中的进制

C语言规定,在八进制数字前要加0(注意这里是数字零,不是大写字母O),在十六进制数字前要加0X或0x(注意这里同样是数字零,不是大写字母O),而在十进制数字前不需要加任何东西。

int i = 10; //表示十进制数字
int j = 010; //表示八进制数字
int k = 0x10; // 表示十六进制数字
int l = 0X10; // 表示十六进制数字

2.汇编中的进制

汇编语言中,在数字后加字母B表示二进制数字,在数字后加字母O表示八进制数字,在数字后加字母D表示十进制数字,在数字后加字母H表示十六进制数字。

例如:
1011B表示二进制数字1011
1357O表示八进制数字1357
2049D表示十进制数字2049
3FB9H表示十六进制数字3FB9

3.常见进制的基数:

十进制:0 1 2 3 4 5 6 7 8 9
二进制:0 1
八进制:0 1 2 3 4 5 6 7
十六进制:0 1 2 3 4 5 6 7 8 9 a b c d e f(或0 1 2 3 4 5 6 7 8 9 A B C D E F)

4.不同进制的输出方式

#include <stdio.h>

int main()
{
	int i = 31;

	printf("i = %d\n", i);  // %d表示以十进制输出整型数据
	printf("i = %o\n", i);  // %o表示以八进制输出整型数据,注意这里是小写字母o
	printf("i = %x\n", i);  // %x表示以十六进制输出整型数据,如果数字中包含字母时,字母为小写
	printf("i = %X\n", i);  // %X表示以十六进制输出整型数据,如果数字中包含字母时,字母为大写
	printf("i = %#x\n", i); // %o表示以十六进制输出整型数据,输出结果中带有0x
	printf("i = %#X\n", i); // %o表示以十六进制输出整型数据,输出结果中带有0X

	return 0;
}

二、十进制转为其它进制

  • 预备知识:在C语言中,小数字除以大数字,商为0,而余数就是小数字本身。例如,3/8 = 0,3%5 = 3;1/2 = 0,1%5 = 1;7/16 = 0,7%16 = 7

示例一:将十进制数字185转为对应的二进制数字,用185不断除以2,每次保留余数,直至商为0,然后把保留的余数倒过来,得到的就是十进制数字185对应的二进制数字,如下图左侧部分所示。

示例二:将十进制数字185转为对应的八进制数字,用185不断除以8,每次保留余数,直至商为0,然后把保留的余数倒过来,得到的就是十进制数字185对应的八进制数字,如下图右上角部分所示。

示例三:将十进制数字3981转为对应的十六进制数字,用3981不断除以16,每次保留余数,直至商为0,然后把保留的余数倒过来,得到的就是十进制数字3981对应的十六进制数字,如下图右下角部分所示。
进制转换图
总结:十进制转n进制,除n取余,直至商为0,后将余数倒叙排列

  • 练习
  • 将十进制数字123转换为对应的二进制数字
  • 将十进制数字123转换为对应的八进制数字,并通过编写程序检查是否正确
  • 将十进制数字10000转换为对应的十六进制数字,并通过编写程序检查是否正确

三、任意进制转为十进制

  • 思考:十进制数字1234是怎么得到的?

在这里插入图片描述
以上述问题为依据,我们有理由推断:
在这里插入图片描述
所以,其它进制转换为十进制的方式便因此得出:
在这里插入图片描述

四、二进制与十六进制的互相转换

  • 思考:1个十六进制位需要多少个二进制位来表示?
    因为1个十六进制位有16种不同的状态,而1个二进制位只有2种不同的状态,所以,需要4个二进制位进行排列组合才能拥有16种不同的状态。通俗地讲,1个十六进制位可以表达出16个不同的数字(0-15),而1个二进制位只能表达出2个不同的数字,所以需要4个二进制位才可以表达出16个不同的数字。例如,十六进制数字C对应的十进制数字是12,十进制数字12对应的二进制数字为1100。所以,1个十六进制位便对应4个二进制位,这在二进制与十六进制的互相转换过程中给我们提供了便利。

1.二进制转为十六进制

方法:从右向左,四位一段,不够补零,按十进制,分段转换

例如:
在这里插入图片描述

2.十六进制转为二进制

方法:将每一个十六进制位转换为四个二进制位

例如:
在这里插入图片描述

五、二进制与八进制的互相转换

  • 思考:1个八进制位需要多少个二进制位来表示?

1.二进制转为八进制

方法:从右向左,三位一段,不够补零,按十进制,分段转换
原理与二进制转为十六进制相同,这里不再举例说明

  • 练习
  • 将二进制数字11010转换为对应的八进制数字
  • 将二进制数字110110转换为对应的八进制数字
  • 将二进制数字0101110转换为对应的八进制数字

2.八进制转为二进制

方法:将每一个八进制位转换为三个二进制位
原理与十六进制转为二进制相同,这里不再举例说明

  • 练习
  • 将八进制数字27转换为对应的二进制数字
  • 将八进制数字34转换为对应的二进制数字
  • 将八进制数字321转换为对应的二进制数字

六、总结

学习完进制转化有助于学习计算机更底层的知识,它将为补码汇编调试等的学习打下坚实的基础。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言之进制转换 的相关文章

  • STL之算法——排序算法

    一 介绍 常用的STL排序算法包括sort reverse merge random shuffle 二 sort 对容器内元素进行排序 1 函数原型 sort iterator begin iterator end 默认以升序方式对元素进

随机推荐

  • Shamir秘密共享协议

    文章仅仅用来构建知识框架工后续的复习使用 本文章是转载于其他博文 原文链接 https blog csdn net z784561257 article details 82942581 假设一个秘密s 秘密分发者将s运用某种特定的算法分成
  • 17个Python的牛逼骚操作,你都OK吗?

    作者 Gautham Santhosh 机器之心编译 Python 是一门非常优美的语言 其简洁易用令人不得不感概人生苦短 在本文中 作者 Gautham Santhosh 带我们回顾了 17 个非常有用的 Python 技巧 例如查找 分
  • 原码,反码,补码的如何取值及其范围

    1 原码 为二进制表示十进制 正数 首位为0 后7位为该数的值 列如 0 0000001 1 0 0000100 4 由此可得出正数原码的范围为 1 负数 首位为符号位 1 后七位为该数的绝对值 列如1 0000001 1 1 000010
  • 小程序 margin-right无效,文字溢出?

    先来看下盒子模型 box sizing样式 告诉浏览器去理解你设置的边框和内边距的值是包含在width内 设置了 box sizing border box 盒子的宽度 border padding width 盒子的高度 border p
  • unix Mechanism vs Policy(机制与策略)

    http blog csdn net ostrichmyself article details 5333558 http blog csdn net liuhaobupt article details 5350950 http linu
  • TFT电路原理

    TFT Thin Film Transistor 薄膜晶体管 在TFT LCD中 TFT的功能就是一个开关管 常用的TFT是三端器件 利用施加于栅极的电压来控制源 漏电极间的电流 对于显示屏来说 每个像素从结构上可以看作为像素电极和共同电极
  • 做了一个XSS的闯关游戏,攻略贴上来

    游戏地址 http xss quiz int21h jp 第一关 比较简单 直接输入 http xss quiz int21h jp sid 2a75ff06e0147586b7ceb0fe68ee443b86a6e7b9 第二关 也相对简
  • 三极管工作原理分析,精辟、透彻,看后你就懂

    随着科学技的发展 电子技术的应用几乎渗透到了人们生产生活的方方面面 晶体三极管作为电子技术中一个最为基本的常用器件 其原理对于学习电子技术的人自然应该是一个重点 三极管原理的关键是要说明以下三点 1 集电结为何会发生反偏导通并产生Ic 这看
  • Topic 6 SCI 文章之计数变量泊松回归

    这期继续说说统计这些事 泊松分布大家可能熟悉些 但是用它来做模型还是需要细细品味一下 泊松回归 也被称为对数线性模型 当结果变量是一个计数 即数值型 但不像连续变量的范围那么大 时 使用泊松回归 研究中统计变量的例子包括一个人有多少次心脏病
  • 程序员写100万行代码是什么感觉

    今天在社群上闲逛 突然发现一个十分有趣的帖子 写了100W行的代码是啥感觉 看完之后就头皮一阵发麻 让我写一万行的代码 are you kidding me 黑人问号脸 我估计写到20万的时候就会突然有个疑问 咦 我的头发呢 A同学 我写两
  • 期货开户市场是一面镜子

    期货市场是一面镜子 照出真实的你 成功者 总需要用失败者来定义 市场中1 的更新和迭代 使进入合理的市场循环状态 有人说期货市场是优秀人才的坟墓 究其根本原因 即使是其他领域的小有成就的精英 在期货市场中也很难完成超越 市场折射出人性的贪婪
  • 如何在matlab中打开一个.dat文件,并载入数据

    方法一 fscanf函数 fid fopen data dat r 打开数据文件 x fscanf fid g 读取文件数据 得到的x数据为列向量 要注意的是 data dat必须是在你操作的目录下 方法二 load函数 load xxx
  • RocketMQ知识

    1 为什么使用MQ MQ在项目中的作用 MQ具有解耦 异步 削峰填谷的功能 在本人项目中主要用于单向报文 交易信息登记的异步操作 2 RocketMQ由哪些角色组成 它们分别由什么作用 NameServer 作为服务协调组件 类似于zook
  • 做项目时候活动详情页面遇到的思考总结1。

    首先这个整体在活动详情这个页面显示 这个页面是这个项目得亮点也是难点 先是pageleft拖拽组件 获得组件数据component改变拖拽状态dragactive 然后在预览页面pagereview中添加到预览位置 先获得拖动鼠标距离预览区
  • 诚之和:怎么在Django中Pyecharts生成图表

    在数据可视化中 我们可以使用一些类似pyecharts来生成图表 但如果我们想在网页中进行数据可视化 还需要Django的支持 那么怎么在Django中Pyecharts生成图表呢 接下来的这篇文章带你了解 因为pyecharts是支持py
  • Flask(数据库操作 十一)

    查询 查询全部 users User query all 查询第一个 users User query first 通过主键获取 users User query get 1 多个主键 users User query get 1 5 us
  • windows下安装虚拟机+ Ubuntu的详细过程

    不是每一个程序员都必须玩过linux 只是博主觉得现在的很多服务器都是linux系统的 而自己属于那种前端也搞 后台也搞 对框架搭建也感兴趣 但是很多生产上的框架和工具都是安装在服务器上的 而且有不少大公司都要求熟悉在linux上开发 因此
  • Spring学习--DI依赖注入

    依赖与依赖注入 传统应用程序设计中所说的依赖一般指 类之间的关系 那先让我们复习一下类之间的关系 泛化 表示类与类之间的继承关系 接口与接口之间的继承关系 实现 表示类对接口的实现 依赖 当类与类之间有使用关系时就属于依赖关系 不同于关联关
  • osgEarth的Rex引擎原理分析(一二七)rex影像层属性及其设置

    目标 一二六 中问题213
  • C语言之进制转换

    文章目录 一 基础知识 1 C语言中的进制 2 汇编中的进制 3 常见进制的基数 4 不同进制的输出方式 二 十进制转为其它进制 三 任意进制转为十进制 四 二进制与十六进制的互相转换 1 二进制转为十六进制 2 十六进制转为二进制 五 二