深入理解二进制十进制十六进制

平常我们在上C语言课时,进制数有二进制,八进制,十进制,十六进制,但这里我们为什么不讲八进制,因为在平时的工作中,几乎不会用八进制。

十进制:

我们平时使用的数都是由0~9共十个数字组成的。例如1,9,11,231,2349等等数,一个数字最多只能表示到9,如果要表示大于9的数,就要由0~9这十个数字组成。例如我们5+9的结果,用一个数字来表示它的结果,是不够的,只能“进位”,用14来表示;也就是满十进一。这些数都是十进制,所谓十进制就是由0~9个数字组成的数,逢十进一(满十进一)。

二进制:

我们不妨将思维拓展一下,十进制是逢十进一,那么二进制就是逢二进一,也就二进制的数不能出现大于2。例如,数字 0、1、10、111、100、1000001 都是有效的二进制。在计算机内部,数据都是以二进制的形式存储的,二进制是学习编程必须掌握的基础。

二进制加减法和十进制加减法的思想是类似的:

· 对于十进制,进行加法运算时逢十进一,进行减法运算时借一当十;

· 对于二进制,进行加法运算时逢二进一,进行减法运算时借一当二。

下面两张示意图详细演示了二进制加减法的运算过程。
1) 二进制加法:1+0=1、1+1=10、11+10=101、111+111=1110


图1:二进制加法示意图




2) 二进制减法:1-0=1、10-1=1、101-11=10、1100-111=101


图2:二进制减法示意图




二进制在平常工作的使用的地方,如需要按位与或取反地方,一个数只取高多少位,或只取低多少位,然后变成什么数;都需要二进制的转换。

Eg:

If(val>>4==0)

{

Do some thing;

}

Else if(val<<3==0)

{

Do some thing;
}else

{

Do other thing;

}

首先得把把val值 换成二进制,然后再右移或左移。注:二进制是目前几乎所有以数字电路为基础的计算设备的内部处理数字的基础进制(它位只有0与1)。

十六进制

除了二进制,十六进制也经常使用,甚至比二进制还要频繁。
十六进制中,用A来表示10,B表示11,C表示12,D表示13,E表示14,F表示15,因此有 0~F 共16个数字,基数为16,加法运算时逢16进1,减法运算时借1当16。例如,数字 0、1、6、9、A、D、F、419、EA32、80A3、BC00 都是有效的十六进制。

注意,十六进制中的字母不区分大小写,ABCDEF 也可以写作 abcdef。

下面两张图详细演示了十六进制加减法的运算过程。

1) 十六进制加法:6+7=D、18+BA=D2、595+792=D27、2F87+F8A=3F11


图5:十六进制加法示意图

2) 十六进制减法:D-3=A、52-2F=23、E07-141=CC6、7CA0-1CB1=5FEF


图6:十六进制减法示意图



那么十六进制数在我们工作中,一般用在哪里呢。除了数字电路中用二进制来表示(我们能看得到的。如1100,001000这样的表示的数)外,平常说的二进制保存文件 ,数据以二进制在串口或网串中传输,它们都是用十六进制来显示的。因为十六进制恰好是2的4倍,表示一个字节的时候仅仅需要2个十六进制数就可以表示出来,因此多数用2个十六进制来表示一个字符,看上去比较清晰(也可以节约数据长度且换算关系相当直观)。

如果大家对八进制有兴趣,可以去了解一下

八进制
八进制有 0~7 共8个数字,基数为8,加法运算时逢八进一,减法运算时借一当八。例如,数字 0、1、5、7、14、733、67001、25430 都是有效的八进制。

下面两张图详细演示了八进制加减法的运算过程。

1) 八进制加法:3+4=7、5+6=13、75+42=137、2427+567=3216


图3:八进制加法示意图


2) 八进制减法:6-4=2、52-27=23、307-141=146、7430-1451=5757


图4:八进制减法示意图

二进制,十六进制在平进工作中用到的地方特别多。如果对二进制与十六进制不理解,就很难把工作做好。所以大家一定要理解透。

以上的图例是借鉴一位大佬的,觉得写的挺好的,加上工作自己总结的。分享给大家。

相关文章

C语言-指针与16进制

①规则16进制1、2、3、4、5、6、7、8、9、10用A表示、11用B表示、12用C表示、13用D表示、14用E表达、15用F表达、16进位。~②例子#includemain(){int a[10]...

PLC编程必看!5种常见进制数解析,搞懂才能玩转PLC!

今天咱们聊聊PLC编程中那些“神秘”的进制数——二进制、十进制、十六进制…是不是一听就头大?别慌!看完这篇,保证你从“懵逼”变“大神”!1.二进制(Binary)●定义:仅由 0 和 1 组成的进制,...

C语言转义字符

字符集(Character Set)为每个字符分配了唯一的编号,我们不妨将它称为编码值。在C语言中,一个字符除了可以用它的实体(也就是真正的字符)表示,还可以用编码值表示。这种使用编码值来间接地表示字...

资深的程序员都是这样排查Java问题的,附工具单

摘要: 平时的工作中经常碰到很多疑难问题的处理,在解决问题的同时,有一些工具起到了相当大的作用,在此书写下来,一是作为笔记,可以让自己后续忘记了可快速翻阅,二是分享,希望看到此文的同学们可以拿出自己日...

net core中byte数组如何高效转换为16进制字符串

在 .NET Core 中,如何把 byte[] 转换为 16 进制字符串?你能想到哪些方法?什么方式性能最好?今天和大家分享几种转换方式。往往在处理字符串性能问题时,首先应该想到的是怎么想办法减少内...