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 = ;
//十六进制类型数字加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呢,后面会介绍)

假设我们定义两个变量

    int number1 = ;
int number2 = ;

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

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

六.进制的其他知识

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 表示正整数,111 1111 1111 1111 1111 1111 1110 1101表示负数

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

C语言中进制知识总结的更多相关文章

  1. 【Xcode学C-4】进制知识、位运算符、变量存储细节以及指针的知识点介绍

    一.进制知识 (1)默认是十进制.八进制前面加0.即int num1=015;是13.十六进制前面加0x/0X.即int num1=0xd.结果是13.二进制前面是0b/0B,即int num1=0b ...

  2. java语言基础-进制

    一丶Java语言基础:进制 1.进制的四种表现形式 (1).二进制:0,1 满2进1. (2).八进制0-7 :满8进1,用0开头表示. (3).十进制:0-9 满10进1. (4).十六进制:0-9 ...

  3. JavaScript中进制之间的转换

    JavaScript中进制之间的转换 //十进制转其他 var x = 100; alert(x); alert(x.toString(2)); //转2进制 alert(x.toString(8)) ...

  4. Python中进制转换函数的使用

    Python中进制转换函数的使用 关于Python中几个进制转换的函数使用方法,做一个简单的使用方法的介绍,我们常用的进制转换函数常用的就是int()(其他进制转换到十进制).bin()(十进制转换到 ...

  5. C语言-进制

    本文目录 • 一.十进制 • 二.二进制 • 三.八进制 • 四.十六进制 • 五.进制总结 • 六.变量与进制 • 七.printf的简单使用上一讲简单介绍了常量和变量,这讲补充一点计算机的基础知识 ...

  6. C语言之进制

    进制 一种计数的方式.侧重点在于计数的时候是逢多少进一. 1)      C语言可以识别的进制 二进制 每一位. 0 0 1 0 0 1 1 0 1 0 1 0 0 1 0 1 1 0 在C语言中,写 ...

  7. C++中进制转换问题

    一直在刷题的时候,都会遇到一个坑,就是进制转换的问题.而每一次都傻乎乎的自己去实现一个.所以算是对以前的坑的一个总结. itoa 函数 itoa是广泛应用的非标准C语言和C++语言扩展函数.由于它不是 ...

  8. 新手第一天学习 C#语言(进制互换)

    说起来我们对一些陌生或者未知的东西有一些恐惧感,但是又有一些期待,虽然我不确定自己能不能学会这门语言,但是我会尽自己最大的努力学. 我们第一天学的的内容呢,对大多数的人都知道,计算机的语言是二进制,但 ...

  9. 一起talk C栗子吧(第七回:C语言实例--进制转换)

    各位看官们.大家好,从今天開始.我们讲大型章回体科技小说 :C栗子,也就是C语言实例. 闲话休提, 言归正转.让我们一起talk C栗子吧! 看官们.上一回中咱们说的是生成随机数的样例.这一回咱们说的 ...

随机推荐

  1. Office2010安装错误

    Office2010安装“错误1406.安装程序无法将值Assembly写入注册表项” 我们在安装Office2010的时候,会遇到如上所示的错误. 今天我自己在安装的过程中就遇到类似的情况.由于我原 ...

  2. gis 导出 dwg,shp

    当我们在webgis 想要把某个地块或者多个地块导出dwg或者shp文件的时候怎么办?这个时候最好就是用后台的方式.首先把web gis上的graphic 的polygon提取为坐标的形式(类似于x, ...

  3. java学习之(内部类)

      大部分时候,类被定义成一个独立的程序单元,在某些情况下,也会把一个类放在另一个类的内部定义,这个定义在其他类内部的类就被称为内部类,内部类有如下特点:  1.内部类提供了更好的封闭,可以把内部类隐 ...

  4. ajax 跳入error的一些原因

    先放一个标准的jquery的ajax代码: $.ajax({ type: 'POST', url: 'getSecondClassification', data: {"sort2" ...

  5. 全选Form > Grid 的所有行

    在AX的Grid 按Ctrl+A,并不一定能选择到grid 的所有行,比如你要将当前grid的数据复制到Excel,你需要全部选择所有行. 但AX自身的数据缓存机制,数据量非常大的时候当前grid只装 ...

  6. 编程规范 html部分

    不管有多少人共同参与同一项目,一定要确保每一行代码都像是同一个人编写的. HTML 部分 语法 对于属性的定义,确保全部使用双引号,绝不要使用单引号. 为每个 HTML 页面的第一行添加标准模式(st ...

  7. webstorm & phpstorm破解

    webstorm: http://idea.qinxi1992.cn/ http://idea.goxz.gq http://v2mc.net:1017 http://idea.imsxm.com h ...

  8. poj3122 pie

    方法:二分. 题目意思:要过生日了,我请大家吃pie,然后人数一共是f+1(我自己).每个人的pie不能是拼接的,而且每个人的面积是一样的,这样就用二分枚举. 范围是0-最大的那块pie. 然后用每一 ...

  9. Unieap3.5Java端通过SQL语句直接查询DataStore

    通过sql查询dataStore 例子见 /mcss/src/com/neusoft/mcss/base/todo/dao/WorkTodoDaoImpl.java getWorksTodo() ID ...

  10. 关于URL大小写问题

    关于URL大小写的问题,不同平台的处理不同:Mac OS X 默认的文件系统(HFS case-insensitive) 是不分大小写的,Windows 上的 NTFS 也是,而 Linux 系统常用 ...