位、字节、字以及数制转换

位、字节、字

计算机中的数据包括文字、数字、声音、图形、图像、视频及动画等,它们在计算机中都是用二进制形式表示和存储的,其最基本的存储单位是“位”和“字节”。

  • 位(bit):一个二进制位称为比特,用b表示,是计算机中存储数据的最小单位。一位可以表示“0”或“1”。
  • 字节(byte):8个二进制位称为字节,通常用B表示,它是数据处理和数据存储的基本单位,如一个英文字母占一个字节,一个汉字占两个字节。一个8位的字节包含256种可能的0,1组合。
  • 字(word):1字=2字节;一个字的字长为16

数制及转换

数制也称计数制,是用一组固定的符号和统一的规则来表示数值的方法。计算机系统采用二进制。
数值的表示都包含两个基本要素:基数和各位的“位权”。

  • 基数是一个进位计数制允许选用的基本数字符号的个数。一般而言,r进制数的基数为人,可供选用的计数符号有r个,分别为0~r-1。每个计数位计满r就向其高位进1,即“逢r进一”。
  • 位权,简称权,是指在一个进位计数制中,各位数字符号所表示的数值等于该数字符号值乘以一个与该数字符号所处位置有关的常数。位权的大小是以基数为底,数字符号所处位置的序号为指数的整数次幂。

在计算机中,一般在数字后面用特定的字母表示该数的进制,具体表示方法为:
- B表示二进制
- D表示十进制
- O表示八进制
- H表示十六进制

十进制转二进制

整数部分的转换采用“除r取余法”。十进制不断除以2,并记下每次所得余数,所有余数按与所得到的相反次序排列,即为相应的二进制数。小数部分的转换则采用“乘r取整法”,并将所得数按顺序排列。

二进制、八进制和十六进制数之间的转换

由于二进制、八进制、十六进制之间存在的特殊关系:8^1=2^3,16^1=2^4,即一位八进制数据相当于3位二进制数,1位16进制数相当于4位二进制数。

计算机为什么采用二进制

计算机内有大量的电子元器件,电子元器件一般有两种稳定的状态:电压的高和低、晶体管的导通和截止、开关的开和关。正好用来表示二进制的0和1表示。采用二进制可以使任何信息数字化容易实现。

二进制的优点:物理上容易实现,可靠性高,运算规律简单,适合逻辑运算。

数值数据的表示

带符号数的表示

数值数据是指通常所说的数或数据,它有正负和大小之分,也有整数和小数之分。
计算机不能存储负号,只能存储0和1。正负也要用0和1来表示,将表示数的位数拿出来一位表述数的符号,一般指定最左边一位表示数的符号,用0代表正数,用1代表负数。

数的原码、反码和补码表示

这种用0和1表示数的符号的数称为机器数,也称为数的原码
机器数在进行运算时,若将符号位和数值位同时参与运算,则会得出错误的结果。
因此,为了运算方便,计算机中引入了反码和补码的概念,将加减法运算统一转换为补码的加法运算。

  • 计算机中数据存储与时钟一样,是个模数系统。超过了它所能表示的最大值后,就又会恢复到初始状态。
  • 当运算结果超出其表示范围时,会产生“溢出”(得出不正确的结果)。
    • 数表示的范围受到字长的限制

正数的原码、反码和补码形式完全相同,而负数则有不同的表示形式。
整数X的原码表示是:整数的符号位用“0”表示正,“1”表示负,其数值部分是该数的绝对值的二进制表示。

反码

反码是求补码的中间过渡。
负数的反码是对该数的原码除了符号位外各位取反

补码

负数的补码是在其反码的基础上末位加1
补码表示中:0有唯一的表示形式,即【+0】=【-0】=00000000,因此,可以用多出来的编码10000000来扩展补码的表示范围值为-128,最高位1即可看做符号位负数,又可以表示为数值。表示数的范围:-128~127

无符号数的表示

在无符号数据处理的过程中,如不需要设置符号位时,可用全部字长来表示数值大小。如8位无符号数的取值范围是0~255.同样位数的数据在机器中,采用无符号表示或有符号表示其取值范围是不同的。

定点数与浮点数

定点数表示

定点数分为定点整数和定点小数。
定点数是指规定小数点固定在某一位置上。浮点数是指小数点位置可以任意浮动。

浮点数表示

采用以2为底的科学记数法存储:

            阶码
N=数符*尾数*2

其中:数符0为正,1为负,尾数和阶码都用二进制数表示
尾数的位数决定数的精度
阶码的位数决定数的范围

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以的,栈在数制转换中的应用是非常广泛的,可以处理任意数的数转换。下面是使用Python实现的一个可以处理20数制转换器: ```python def decimal_to_base(decimal, base): stack = [] while decimal > 0: remainder = decimal % base stack.append(remainder) decimal //= base result = "" while stack: result += str(stack.pop()) return result def base_to_decimal(num, base): decimal = 0 power = 0 for digit in num[::-1]: decimal += int(digit) * (base ** power) power += 1 return decimal ``` 这个代码实现了两个函数,一个用于将十进制数转换为任意进制,另一个用于将任意进制的数转换为十进制。其中,`decimal_to_base` 函数使用栈来保存每次除法运算的余数,然后将栈中的元素弹出并拼接在一起,生成最终的结果。`base_to_decimal` 函数则是通过将任意进制的每一数乘以对应的进制指数,然后相加得到十进制数的结果。 这两个函数可以处理任意数的数转换,包括20以上的数。如果你需要转换20以上的数,只需要将参数传入这两个函数即可。 例如,将一个20的十进制数转换为16进制数: ```python decimal = 12345678901234567890 base = 16 result = decimal_to_base(decimal, base) print(result) # 输出:2B1E0E6FC7CA3C2A2 ``` 将一个20的16进制数转换为10进制数: ```python num = "2B1E0E6FC7CA3C2A2" base = 16 result = base_to_decimal(num, base) print(result) # 输出:12345678901234567890 ``` 希望这个代码可以帮助您实现20数制转换

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值