进制表示和转换是嵌入式开发人员的基本功。在开发,调试过程中,大量阅读芯片手册,查看MCU寄存器,内存等都会涉及到十六进制,二进制等的快速切换,以理解各个bit位含义和内容。另外C代码中也经常用到位操作。
本文面向的读者是希望通过学习能够掌握二进制和十六进制表示,并熟练二进制,十六进制间转换。
建议学习顺序,理解十进制数值如何分解,然后花足够时间理解引例部分和 106 的两种表示的例子。概念
然后就是多练习二进制,十六进制,十进制转换。技能
需要熟练三种进制数值对照表。掌握PC自带 计算器(程序员模式)进制切换。工具
基础数学表示
...
...
举例 1984,数字 1 在千位(),数字 9 在百位(),数字 8 在十位(),数字 4 在个位(),分解它为
1个1000,9个100,8个10和4个1,即:
.由此看出
另外十进制
练习1 273.15怎么表示成(数字x位)的组合?
开始二进制之前, 我希望通过一个例子让读者区分开数值和表示形式两个概念。
比如我们说温度,“今天20(摄氏)度”,这里的 20 就是数值,(摄氏)度 就是摄氏温标下表示形式
如果你知道除了摄氏温度还有华氏温度,并且二者可以转换参见百度百科华氏与摄氏
华氏度 = 32°F+ 摄氏度 × 1.8
同样你可以说,“今天68华氏度”,其实说的是同样的内容。
从这个例子,我们看出同样一个内容,我们其实可以表示成不同 数值+表示形式。
思考,生活还有哪些例子,同样内容不同说法?比如,身高,体重,时间。
应用上面的概念,一百零六可以表示
同样也可以表示
如果仔细看
所以
我们发现乘号前面只有 {0, 1},如果我们像表示十进制数一样,只提取每位前面的数字
就得到(习惯表示二进制时,在右下角添加数字2以区别十进制数)
这就是二进制
对比十进制,区别在于
位上的数字,二进制只有0和1,没有2,3,。。。,9,
位不再是 。。。千,百,十,个,十分,。。。而是,。。。,bit2,bit1,bit0等,发音比特二,比特一,比特零
注意:比特+负数在浮点数计算会用到
再看一遍这个例子
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
0 1 1 0 1 0 1 0
练习2 二进制 换做10进制表示?
提示 填写下面8个?处,分别是0还是1?然后按上面公式计算结果
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
? ? ? ? ? ? ? ?
打开计算器的程序员模式,手动切换二进制,输入10101001,然后切换回十进制并对照你的计算结果。
理解二进制之后,你是不是也能看懂下面的笑话了。
建议理解二进制和十进制间的区别和联系以及数值和表示等概念,再继续后面学习。
恭喜你已经理解二进制。下面来看十六进制,就非常容易了。
十六进制表示以 0x or 0X 开始(这里是数字零不是字母O),例如 0x12AD
下面这个对照表需要记忆,十六进制1个数字 <------> 4个二进制数字
十六进制 | 十进制 | 二进制 |
---|---|---|
0 | 0 | 0000 |
1 | 1 | 0001 |
2 | 2 | 0010 |
3 | 3 | 0011 |
4 | 4 | 0100 |
5 | 5 | 0101 |
6 | 6 | 0110 |
7 | 7 | 0111 |
8 | 8 | 1000 |
9 | 9 | 1001 |
A or a | 10 | 1010 |
B or b | 11 | 1011 |
C or c | 12 | 1100 |
D or d | 13 | 1101 |
E or e | 14 | 1110 |
F or f | 15 | 1111 |
举例 十六进制 0x1E9B 转换成二进制
1 E 9 B
0001 1110 1001 1011
练习3 把下图中十六进制 0x078E 3AD1 转换成二进制?引用TM4C123GH6PM data sheet
本文从大家熟悉的十进制数值表示入手,并借助温度两种不同表示(华氏和摄氏)的例子,过渡到二进制和十六进制表示。
同时,列举实际工作中用到的场景和例子。
答案1
答案2
答案3