当前位置:网站首页>C语言知识点精细详解——数据类型和变量【1】——进位计数制

C语言知识点精细详解——数据类型和变量【1】——进位计数制

2022-04-23 14:12:00 VelvetShiki_Not_VS

进位计数制

针对数据如何在计算机中表示及其算术和逻辑运算的⽅法,提出了进位计数制,计算机使⽤的机器语⾔就是⼆进制位,除了⼆进制位数还有其他供⼈类语⾔计数的进制位,为了更好实现算数语⾔的互通需要进⾏进制转换。

基本概念:

常⽤的进制位数

1.  ⼆进制Binary:仅由0和1构成的,在⼀个⽐特位上仅能表示的两种情况,逢二进一,数据结尾用B或()2表示。

2.  ⼋进制Octal:由0~7共8个数字所表示,逢⼋进⼀,数据结尾用()8表示。

3.  ⼗进制Decimal:由0~9共10个数字表示,逢⼗进⼀,数据结尾用D或()10表示。

4.  ⼗六进制Hexadecimal:由0~9,A,B,C,D,E,F共16个数字和字⺟构成,逢⼗六(F)进⼀,数据结尾用()H或0x前缀使用。

5.  权值(位权或权重):进制数每个数值所在位置所对应的真实值大小,对于整数而言,左边一位是其右边相邻位的进制倍数(如二进制整数,左边一位权值为右边一位的整2倍,十进制则为10倍)。每个数字所在的位置反映的权重,对于任意进制权重基本公式如下:

 

进制数位权及转换

• ⼆进制位权表

 

 1. ⼆进制转⼗进制

根据⼆进制位权数表的每⼀位对应权重及位权进制公式直接将各⽐特位为1的权值相加可得⼗进制结果。

例:对于⼆进制10010010.110转⼗进制数

根据按权展开求和法:将⼆进制数写成加权系数展开式,再根据⼗进制加法直接求和。

1*2^7+1*2^4+1*2^1+1*2^(-1)+1*2^(-2) = 146.75

也可直接记住每个⼆进制⽐特位所属位权值进⽽直接相加(对于一字节8位的二进制整数权值规律从右到左为1 2 4 8 16 32 64 128)。

   2. ⼆进制转⼋进制

⼋进制共0~7⼋个数值,可由每三个⼆进制位相组合而成,每三个位可表示2^3=8共⼋种情况中的一个数据。

例:对于⼆进制数11001111.01111转⼋进制数

根据每三位为⼀个⼋进制数原则:

⼆进制:011 001 111. 011 110

⼋进制:3 1 7. 3 6

注意,整数部分不够三位在左边(⾼位)补0,⼩数部分不够三位在右边(低位)补0

  3. ⼆进制转⼗六进制

与⼋进制类似,⼆进制位数每4个为⼀组,每4位可表示16种数值中的一种情况,再将各部分权值相加。

例:⼆进制数1111000010.01101

根据每四位为⼀个⼗六进制数原则:

二进制:0011  1100  0010 . 0110  1000

十六进制:3  C   2.  6  8

所以最终结果为3C2.68H。 同⼋进制⼀样,整数部分不够四位在左边(⾼位)补0,⼩数部分不够四位在右边(低位)补0;每⼀个字节可分为两个⼗六进制数

 

•  ⼋进制位权

二进制与八进制对应关系表

  1. ⼋进制数17.36转⼆进制数

根据上表:

⼋进制:1 7. 3 6

⼆进制:001 111.011 110

即可得⼆进制数1111.01111

  2. ⼋进制数251.5转⼗进制

按权展开求和法:

2*8^2+5*8^1+1*8^0+5*8^(-1) = 168.625

  3. ⼋进制数13.40转⼗六进制数

⼋进制转⼗六进制没有⼀步到位的⽅法,只能通过中间进制数作为媒介,如⼆进制或⼗进制数,然后再次进⾏转换。

⼋进制:1 3. 4 0

⼆进制:001 011. 100 000

⼗进制:1*8^1+3*8^0+4*8^(-1) = 11.5(按权展开法)

⼗六进制:B.8

•  ⼗进制位权(Decimalism)

如个位,⼗位,百位等,每个数字位置的权重基数为10,即整数部分从右边低位到左边⾼位分别有10^0, 10^1, 10^2等。⼀般对数字的书写⽅法为:

 

 1. ⼗进制数转⼆进制,⼀般有两种⽅法:

• 整数部分除基取余法⼩数部分的乘基取整法

例:⼗进制数75.3转⼆进制

⼗进制:整数部分——75,⼩数部分——0.3

说明:整数75逐次除以2,将每次得到的余数写在右边,当商为0时,余数由下往上依次对应⼆进制的低位到⾼位。

 ⼩数0.3依次乘2,将每次得到的结果的整数位取出来,计算结果由下往上依次对应⼆进制⼩数为的低位到⾼位。注意,因为⼆进制权值固定,可能遇到⼗进制⼩数乘基取整法永远不能归0的情况,即⼆进制权值相加只能逼近该⼩数值,则精确⼆进制位数⼀般取5位

所得⼆进制整数及⼩数最终为1001011.010

• 凑值法

针对于所给⼗进制数不是很⼤,可通过⼆进制位权表各位数拼凑相加⽽得。

例:⼗进制数260.75转⼆进制

不采⽤除基取余法和乘基取整法,字节查阅⼆进制位权表,通过查阅可知1*2^8+1*2^2+1*2^(-1)+1*2^(-2) = 100000100.11

注:该⽅法计算位数不多不⼤的⼗进制转⼆进制更快捷⽅便。

  2. ⼗进制数167转⼋进制

整数部分所⽤⽅法与转⼆进制整数的除基取余法相同,只是除数的基数部分r变为了8.

与⼆进制余数相同,由下往上依次对应⼋进制⾼位到低位。

  3. ⼗进制数转⼗六进制数两种⽅法:

• 整数部分除以16的除基取余法及⼩数部分的乘基取整法同十进制转二进制

例:将⼗进制数4966.494转化为⼗六进制数

说明:

1. 整数部分与⼩数部分隔开,整数部分不断除以16,将余数由下往上(⼗六进制⾼位往低位)写出,且逢16进1。

2. ⼩数部分不断乘16,将结果的整数取出,后续乘数的整数回归到0的状态,继续乘法。取整后从上往下(或从左往右)依次以⼗六进制从低往⾼位排,遇到乘不到整数的⼩数则取前6位。

3. 也可以先将⼗进制转换为⼆进制,再通过每4位为⼀组转化为⼗六进制。

⼗六进制(Hexadecimalism)

  1. ⼗六进制转⼆进制

例:⼗六进制数AE86.1转⼆进制

⼗六进制:A E 8 6. 1

⼆进制:1010 1110 1000 0110.0001

  2. ⼗六进制转⼋进制

可先通过十六转十进制,再转八或。十六转⼆再转⼋,没有⼀步到位。具体方法同上。

  3. ⼗六进制转⼗进制——通过加权展开法可得

加权展开与上述方法一致。

各进制数表示⽅法总结:

部分素材图片引用自网络,《王道考研》丛书,侵删。

阶段性预热必备基础知识,涉及C基础知识点,可参考C语言知识点精细详解——初识C语言【1】_VelvetShiki_Not_VS的博客-CSDN博客配合食用更佳~

个人笔记精心整理,创作不易。若有疑问请留下评论或私信,如果对你有帮助的话请留下点赞再走吧~ 

版权声明
本文为[VelvetShiki_Not_VS]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_67611811/article/details/124256850