1.什么是进制

进制是一种计数的方式,常用的有二进制、八进制、十进制、十六进制。任何数据在计算机内存中都是以二进制的形式存放的。

我对进制的个人理解,二进制数是以2为计算单元,满2进1位的数;八进制数是以8为计算单元,满8进1位的数。

对于任何一个数字,我们都可以用不同的进制来表示,比如,十进制数12,用二进制表示为1100,用八进制表示为14,用十六进制表示为0xC。

2.进制的转换规则

遵循满进制值进1位,个位数变为0的原理,下面我们以十进制数18为例,对1-18中每一个数值转换各种进制做一个详细说明

转二进制:

1小于2,无需进1位,1的二进制值是1

2为二进制值1后面一个数,由于1+1满2,需要进1位,个位数变为0,所以2的二进制值是10

3为二进制值10后面一个数,由于11的个位数1小于2,无需进1位,所以3的二进制值是11

4为二进制值11后面一个数,由于11的个位数1+1满2,需要进1位,而二进制值11的位数1+1又满2,所以位数加1,最终转换结果为100

转换思路:二进制值11+1 ->10+(1+1)(个位等于2,进1位,个位数变为0) ->(1+1)+0(位数满2,进1位) -> 100

以此类推,最终十进制数18的二进制转换结果是10010

转八进制:

1-7小于8,无需进1位,1-7的八进制由1-7表示

8为八进制值7后面一个数,由于7+1满8,需要进1位,个位数变为0,所以8的八进制值是10

以此类推,最终十进制数18的八进制转换结果是22

转十六进制

十六进制中,个位数1-15分别为1 2 3 4 5 6 7 8 9 a b c d e f (a=10....f=15)

16为十六进制值c后面1个数,由于c+1满16,需要进1位,个位数变为0,所以16的十六进制是10。

最终十进制数18的十六进制转换结果是12

详细结果如下图所示(C语言把数字前面加0x的数认为是十六进制数)

3.C语言中int类型进制的声明以及占位符

虽然以下3个变量的赋值方式不同,但实际赋值结果都是18

复制代码 代码如下:

//二进制类型数字加0b int number1 = 0b10010; //八进制类型数字加0 int number2 = 022; //十六进制类型数字加0x int number3 = 0x12;

八进制占位符:%o

十六进制占位符:%x

4.内存存储数据细节

我们知道,int类型数据占据4个字节,1个字节是8bit。并且任何数据在计算机内存中都是以二进制的形式存放的,所以内存需要用32个0或1来描述1个int类型数据。

由于18的二进制数是10010,我们将一个int类型变量赋值18,本质上是将这个变量的内存地址对应的32个bit位修改为:

0000 0000 0000 0000 0000 0000 0001 0010(未满31位,后面的数字用0填充:为什么是31而不是32呢,后面会介绍)

假设我们定义两个变量

//二进制类型数字加0b

int number1 = 0b10010;

//八进制类型数字加0

int number2 = 022;

//十六进制类型数字加0x

int number3 = 0x12;

计算机会根据内存地址以由大到小的顺序进行分配内存空间,具体如下图所示:

5.进制的转换公式

二进制转十进制

0b1100 ->0*2的0次方 + 0*2的1次方 + 1*2的2次方 + 1*2的3次方 = 12

十进制转二进制

67 ->64+2+1 ->2的6次方+ 2的1次方 + 2的0次方 = 0b1000011

6.进制的其他知识

1.n位二进制能保存的整数范围公式:2的n次方-1

例如,3位的二进制数最大值为111,对应的十进制数字为7;5位的二进制数最大值为11111,对应的十进制数字为(2*2*2*2*2)-1 = 31。

2.负数的二进制保存规则是最左边的数字是1。例如,0000 0000 0000 0000 0000 0000 0001 0010 表示正整数,1111 1111 1111 1111 1111 1111 1110 1101表示负数

由此,我们就能推测出,int类型能保存的最大整数是2的(32-1)次方-1 =2147483647。为什么要用32-1,很简单,32个bit中,必须抽1个bit位用来描述这个数字是正数还是负数。

c语言中0x12是什么进制,C语言中进制知识汇总相关推荐

  1. c语言中什么函数可以作为虚函数,C++语言中的“虚函数”就像C语言中的指针,必须要弄懂的...

    上一节较为详细的讨论了C++语言中基类被派生类继承过程中的内存模型,尤其较为详细的分析了虚函数及其虚表.虚表指针在内存中是如何分布,如何存储的,这对于理解C++语言中的"动态绑定" ...

  2. c语言中5l是数值或字符常量,C语言中什么叫做正确的数值或字符常量?

    用一对单引号将一个字符括起表示合法的字符常量.例如'a'.数值包括整型.浮点型.整型可用十进制,八进制,十六进制.八进制前面要加0,后面由0到7八个数表示. 在C语言中,字符常量有以下特点: 字符常量 ...

  3. matlab for判断语句,matlab使用笔记(一)——matlab语言中if、for语句与C语言中的差别...

    好久没用matlab编写程序,上周在亲导师面前,愣生生是2小时没编出一选择函数的程序.羞愧至极,愤而写之.主要内容是matlab语言中与c语言中if.for语句的差别. 突然插一下!!!end.end ...

  4. c语言中eof的作用,深入解读C语言中的符号常量EOF

    EOF是指文件的结束符,是一个宏定义 借助于getchar 与putchar 函数,可以在不了解其它输入/输出知识的情况下编写出 数量惊人的有用的代码.最简单的例子就是把输入一次一个字符地复制到输出, ...

  5. C语言中lwr是谁的缩写,C语言中关于字符串的操作(转)

    浅析C语言中关于字符串的操作(转) 前言:如果您是学C/C 的,对于字符串的操作不是很了解,请您耐心读完.作为我的朋友,我很乐意和您分享我最近的知识积累.毕 竟,网上很少有这么全,这么细的介绍,更少有 ...

  6. r语言中popsd和sd的区别_R语言中回归和分类模型选择的性能指标

    有多种性能指标来描述机器学习模型的质量.但是,问题是,对于哪个问题正确的方法是什么?在这里,我讨论了选择回归模型和分类模型时最重要的性能指标.请注意,此处介绍的性能指标不应用于特征选择,因为它们没有考 ...

  7. C语言中tan函数的参数,C++_C语言中正切的相关函数总结,C语言tan()函数:正切函数 头 - phpStudy...

    C语言中正切的相关函数总结 C语言tan()函数:正切函数头文件: #include tan() 函数用来求给定值的正切值,其原型为: double tan(double x); [参数]x 为给定的 ...

  8. c语言中int x=0101,二进制安全_C语言中数据类型

    1.C语言中的数据类型: 2.学习数据类型的三个要素: 1.存储数据的宽度 2.存储数据的格式 3.作用范围(作用域) 3.整数类型:char short int long char 8BIT 1字节 ...

  9. 在c语言中sqrt如何用,sqrt在c语言中怎么用?

    sqrt()函数在c语言中用于计算一个非负实数的平方根:其语法为"double sqrt(double)".在sqrt()函数中没有"sqrt (int)",但 ...

最新文章

  1. 面试官眼中的计算机水平,面试官最不喜欢的五句话,千万别说了
  2. oracle Ratio_to_report的用法
  3. python基础day4
  4. 重采样算法实践 --- (一)
  5. 46. Ext中namespace的作用(转)
  6. maven 引入net.sf.json-lib依赖时报错(classifier)
  7. 如何处理SAP Fiori gateway service使用过程中遇到的404 error
  8. HTML5程序开发范例宝典 完整版 (韩旭等著) 中文pdf扫描版
  9. hoj 1640 Mobile phones //poj 1195 Mobile phones 二维树状数组
  10. Linux 简单的双线设置
  11. Java 实现MD5
  12. 麻省理工18年春软件构造课程阅读03“测试”
  13. java数组表示方法_Java中数组总结
  14. Linux嵌入式开发必读推荐书籍
  15. 华为要开发人工智能手机 魅族新机发布会却被调侃不用开了!
  16. python读取oracle数据库中文乱码_PL/SQL连接Oracle数据库,中文乱码,显示问号
  17. 第六章 深入理解Magento – 高级Magento模型(EAV)
  18. 程序员才看得明白的面试圣经
  19. 【SpringBoot】72、SpringBoot中接入轻量级分布式日志框架Graylog
  20. JAVA基础入门教程——Java介绍

热门文章

  1. 谈技术文章翻译的信雅达-下
  2. java派单系统平台源码完整版 带说明
  3. 机器人教育的中心地段
  4. 概率速度2013年阿里巴巴暑期实习生笔试题--2013年5月5日考试
  5. 测试枕头软件,360度模拟人体睡眠测试,选对枕头让睡眠一步到位
  6. Eclipse Scala环境的配置
  7. matlab dae,matlab解DAE遇到的问题
  8. 在一个内部群里,我围观了微信最流行的诱导吸粉活动
  9. 7-6 判断题 (15分)
  10. 阻抗分析仪 测出的阻抗为负数