【愚公系列】软考高级-架构设计师 003-进制的转换

举报
愚公搬代码 发表于 2024/06/30 09:15:27 2024/06/30
【摘要】 🏆 作者简介,愚公搬代码🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。🏆《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主...

🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。
🏆《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏

🚀前言

进制转换是指将一种数制表示的数转换为另一种数制表示的过程。在计算机科学和日常生活中,最常见的数制包括二进制、十进制、八进制和十六进制。每种数制都有其特定的基数(Base),如二进制的基数是2,十进制的基数是10,八进制的基数是8,十六进制的基数是16。不同的数制在表示数字时使用的字符和计数规则不同。

常见的进制转换方法包括:

  1. 二进制转十进制

    • 方法:将二进制数的每一位乘以2的相应次幂(位数-1),然后求和。
    • 例如,二进制数101转换为十进制数为
      (1×22+0×21+1×20=4+0+1=5)(1 \times 2^2 + 0 \times 2^1 + 1 \times 2^0 = 4 + 0 + 1 = 5)
  2. 十进制转二进制

    • 方法:将十进制数不断除以2,直到商为0,然后将得到的余数逆序排列。
    • 例如,十进制数5转换为二进制数为101
  3. 八进制和十六进制与二进制的转换

    • 由于8和16都是2的次幂((23)(2^3)(24)(2^4) ),这使得八进制和十六进制与二进制之间的转换相对简单。可以将每一位八进制或十六进制数直接转换成对应的3位或4位二进制数。
    • 例如,八进制数7转换为二进制数为111,十六进制数F(15)转换为二进制数为1111
  4. 十进制转八进制或十六进制

    • 可以先将十进制数转换为二进制数,然后再从二进制转换为八进制或十六进制。或者直接通过除基取余法,类似于十进制转二进制的方法,但是这次除以8或16。
  5. 八进制与十六进制直接转换

    • 通常通过二进制作为中间介质进行转换。

为什么需要进制转换?

在计算机科学中,不同的进制有其特定的应用场景。例如,二进制是计算机内部处理信息的基础,十进制是人类日常生活中最常用的数制,八进制和十六进制常用于计算机编程和系统设计中,因为它们能更简洁地表示和处理二进制数据。因此,进制转换是计算机科学、电子工程和信息技术领域中一项基本且重要的技能。

🚀一、二进制和十进制互转

🔎1.无符号的二进制整数

无符号的二进制整数是一种使用二进制表示的数,其中所有的位(bit)都用来表示数值本身,没有位被用来表示数的正负。这与有符号的二进制数相区别,后者会用一个或多个位来指示数的正负(通常是最高位)。在无符号的二进制表示法中,最高位(最左边的位)同样用于增加数的值,这使得无符号数能表示的范围全为非负数。

特点

  • 非负值:无符号二进制整数只能表示非负整数(包括0)。
  • 数值范围:对于n位的无符号二进制整数,它可以表示的数值范围是从0到(2^n - 1)。
  • 更大的正数范围:相比同样位数的有符号整数,无符号整数能表示更大的正数,因为所有的位都用于表示数值大小。

计算范围

假设有一个8位的无符号二进制整数,它的数值范围是从00000000(十进制中的0)到11111111(十进制中的255),总计可以表示256个不同的值。

应用

无符号二进制整数广泛应用于计算机科学和相关技术领域,特别是在需要精确控制数据如何在内存中表示和操作时。例如,在处理图像数据时,一个像素点的颜色值(如RGB值)就可能使用无符号整数来表示,其中每个颜色通道的亮度等级(通常是0到255)可以用一个8位的无符号整数来存储。其他应用包括计算机网络中的地址表示、硬件设计、以及任何需要精确位操作的场景。

注意事项

  • 当进行算术运算时,特别是涉及不同数据类型(如有符号和无符号)的运算时,需要格外注意,因为这可能导致意外的类型转换和数值溢出问题。
  • 在编程时,选择正确的数据类型(无符号还是有符号)对于防止溢出、避免逻辑错误和确保程序的正确性至关重要。

🔎2.带符号的二进制整数

带符号的二进制整数是使用二进制表示的整数,其中一位(通常是最高位)被用来表示数的符号——正数或负数。在计算机科学中,有两种常用的表示带符号整数的方法:原码、补码(还有一种较少使用的方式叫反码,主要用于补码的运算过程中)。

原码

原码是最直观的表示方式,最高位为符号位(0表示正数,1表示负数),其余位表示数值的大小。例如,对于一个8位的二进制数:

  • 正数5表示为:00000101
  • 负数5表示为:10000101

原码简单直观,但在运算中存在一些问题,如正负零的区别表示和算术运算复杂性。

补码

补码是计算机中最常用的表示带符号整数的方法。对于正数,补码与其原码相同;对于负数,补码是其原码除符号位外所有位取反(即0变1,1变0,称为反码)后加1。例如,8位二进制数中:

  • 正数5的补码表示为:00000101(与原码相同)
  • 负数5的补码表示为:11111011

补码的优势在于简化了包括加法和减法在内的算术运算,使得计算机能够使用统一的电路进行数值运算,并且解决了原码表示中正负零的问题。

计算负数的补码

要得到一个负数的补码表示,可以通过以下两种方法之一:

  1. 将该数的正值取二进制形式,然后通过取反加1得到负数的补码。
  2. 直接从该负数的绝对值的二进制形式出发,从右向左数,保留第一个1及其右边的所有位不变,然后将左边的所有位取反。

补码的数值范围

对于n位的二进制补码表示:

  • 最小值是-2^(n-1),用一个1后跟n-1个0的补码表示。
  • 最大正值是2^(n-1) - 1,用0后跟n-1个1的补码表示。

例如,在8位二进制补码表示中,能表示的范围是从-128127

补码不仅在整数算术运算中被广泛使用,还是理解和设计计算机算术逻辑单元(ALU)的基础。通过补码,计算机能够以统一的方式处理加法和减法,简化硬件设计并提高运算效率。

🔎3.小数二进制数

二进制小数和十进制小数类似,是用来表示小于1的数值。在二进制中,每一位代表的值是2的幂,正如十进制中每一位代表的是10的幂。对于小数点后的部分,每一位代表的是2的负幂。

表示方法

二进制小数使用小数点(.)来分隔整数部分和小数部分。小数点左边是整数部分,右边是小数部分。小数点右边第一位代表的是(21)(2^{-1})
(即0.5),第二位代表的是(22)(2^{-2})
(即0.25),以此类推。因此,每向右移动一位,代表的数值就减半。

示例

以二进制小数10.11为例,它的十进制值可以这样计算:

整数部分:(1×21=2)(1 \times 2^1 = 2)

小数部分:(1×21+1×22=0.5+0.25=0.75)(1 \times 2^{-1} + 1 \times 2^{-2} = 0.5 + 0.25 = 0.75)

因此,10.11在二进制中代表的十进制值是(2+0.75=2.75)(2 + 0.75 = 2.75)

小数二进制转十进制

转换二进制小数到十进制的方法是将每一位乘以其对应的2的幂然后求和。例如,二进制小数0.101转换为十进制是:

(1×21+0×22+1×23=0.5+0+0.125=0.625)(1 \times 2^{-1} + 0 \times 2^{-2} + 1 \times 2^{-3} = 0.5 + 0 + 0.125 = 0.625)

十进制小数转二进制

十进制小数转换为二进制小数的常用方法是乘2取整法,即将小数部分乘以2,取结果的整数部分作为二进制表示中的下一位,然后再取结果的小数部分继续乘以2,重复此过程直到小数部分为0或达到所需的精度。例如,将十进制的0.625转换为二进制:

  1. (0.625×2=1.25)(0.625 \times 2 = 1.25),取整数部分1,剩下小数部分0.25。
  2. (0.25×2=0.5)(0.25 \times 2 = 0.5),取整数部分0,剩下小数部分0.5。
  3. (0.5×2=1.0)(0.5 \times 2 = 1.0),取整数部分1,剩下小数部分0。

所以,十进制的0.625转换为二进制后是0.101。

二进制小数在计算机科学中尤其重要,因为所有的计算机数据和运算最终都是通过二进制来表示和处理的。理解二进制小数的表示和转换对于深入理解计算机运作原理非常有帮助。

🔎4.练习题

1、将二进制1100.101转化为十进制,结果是( )。

A. 12.625
B. 12.75
C.24.625
D.24.75

解析:

将二进制数1100.101转换为十进制,可以分别转换整数部分和小数部分。

整数部分
(1×23=8)(1 \times 2^3 = 8)

(1×22=4)(1 \times 2^2 = 4)

(0×21=0)(0 \times 2^1 = 0)

(0×20=0)(0 \times 2^0 = 0)

整数部分的和为(8+4+0+0=12)(8 + 4 + 0 + 0 = 12)

小数部分
(1×21=0.5)(1 \times 2^{-1} = 0.5)

(0×22=0)(0 \times 2^{-2} = 0)

(1×23=0.125)(1 \times 2^{-3} = 0.125)

小数部分的和为(0.5+0+0.125=0.625)(0.5 + 0 + 0.125 = 0.625)

结合整数和小数部分
将整数部分和小数部分相加,得到(12+0.625=12.625)(12 + 0.625 = 12.625)

因此,二进制数1100.101转化为十进制的结果是12.625。

所以,正确答案是A. 12.625

2、将十进制11.75转化为二进制,结果是( )。
A. 1011.11
B. 1010.11
C. 1010.01
D. 1011.01

解析:

要将十进制数11.75转换为二进制,我们可以分别转换整数部分和小数部分。

整数部分:11转换为二进制

  1. 11除以2,商5余1。
  2. 5除以2,商2余1。
  3. 2除以2,商1余0。
  4. 1除以2,商0余1。

将得到的余数逆序排列,得到1011

小数部分:0.75转换为二进制

  1. 0.75乘以2等于1.5,取整数部分1,留下小数部分0.5。
  2. 0.5乘以2等于1.0,取整数部分1,小数部分变为0,停止。

因此,0.75的二进制表示为11

结合整数和小数部分

将整数部分和小数部分结合起来,得到十进制数11.75的二进制表示为1011.11

所以,正确答案是A. 1011.11


🚀感谢:给读者的一封信

亲爱的读者,

我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。

如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。

我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。

如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。

在这里插入图片描述

再次感谢您的阅读和支持!

最诚挚的问候, “愚公搬代码”

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。