数据的表示与运算1

本文详细介绍了进位计数制,包括二进制、八进制和十六进制,以及它们之间的转换方法。重点讲解了十进制转为二进制、八进制和十六进制的过程,并介绍了原码、补码、反码和移码的概念,以及在C语言中整数数据类型的表示。
摘要由CSDN通过智能技术生成

2.1数值与编码

2.1.1 进位计数制及其互相转换

[注意!!]  2018考察

二进制编码的原因:

  • 计算机只有两种状态,0和1可以被稳定并简单的表达。成本低

  • 1和0正好对应逻辑上的真和假,为逻辑判断提供便利条件

  • 二进制的编码和运算规则简单,可以利用逻辑门电路方便实现

  • [总结]  利用二进制简单方便并且成本低

进位计数法以及各进制数之间的转换

[注意!]  其实我们没有必要强迫自己去记忆书中的进制表示公式,而是只需要明白一些简单的规律即可

基数:二进制,八进制,十进制,16进制中的2,8,10,16就是基数

二进制只有0,1

八进制只有0,1,2,3,4,5,6,7

十六进制只有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 后边英文字母分别表示10,11,12,13,14,15

十进制转各进制

个人认为由十进制数转换为各进制数是最简单的,方法如下:

首先是整数部分,我们只需要用整数部分去除以要转换成的进制数的基数,直到最后的商为0,将每一步得到的商逆序排序即可。

将十进制整数123转为2进制,8进制,16进制

123/2=61 ...... 1123/8=15 ...... 3123/16=7 ...... 11
61/2=30 ...... 115/8=1 ...... 77/16=0......7
30/2=15 ...... 01/8=0 ...... 1故十六进制数就是7B
15/2=7 ...... 1故八进制数就是173
7/2=3 ...... 1
3/2=1 ...... 1
1/2=0 ...... 1
故二进制数就是1111011

我们需要了解的是,十进制数转二进制数是最常用的,因为八进制和十六进制可以用二进制数很方便地表达出来,所以小数部分就不做详细解释。

之后是小数部分,相对于整数部分的直接除,小数部分采用乘的方式,取整数部分为排序,小数部分继续乘他的基数。并且也不需要逆序排序。

将十进制数0.6875转为2进制

0.6875×2=1.375 ——1

0.375×2=0.75 ——0

0.75×2=1.5 ——1

0.5×2=1 ——1

故变为的二进制数就是0.1011 ,八进制和十六进制同理。

[注意]  这一部分的知识点将在之后的IEEE754和浮点数的运算中不断用到,所以要熟练应用

任意进制转十进制

各位数码按权值相乘相加即可,二进制转十进制是从右到左用二进制的每个数去乘以2的相应次方(次方从0开始)。其余进制只需要将基数改变,建议大家可以直接将其首先变为二进制再进行计算。举例讲解:

将二进制数1101转为十进制

二进制转八进制和十六进制

二进制转八进制和十六进制时只需要从小数点为边界,整数部分向左数,小数部分向右数。八进制是2的3次方,故3个为一组,同理十六进制就是4个为一组。每组对应乘2的N次方,也就是将每一组都当成一个独立的二进制数,将其用转十进制的方法转变。对于位数不够的情况分别在最左边和最右边补0即可。语言表达不够明确,我们举例讲解:

将二进制数1111000010.01101分别变为八进制和十六进制

001 111 000 010 . 011 01

第一组就是0×2的2次方+0×2的1次方+1×2的0次方,也就是1.所以就变成了(1712.32)O

0011 1100 0010 . 0110 1000

第一组就是0×2的3次方+0×2的2次方+1×2的1次方+1×2的0次方,也就是3.所以就变成了(3C2.68)H

2.1.2定点数的编码表示

真值和机器数

众所周知,我们日常生活中的数字包含正数和负数之分,计算机也是如此。他将数字分为有符号数和无符号数两种计算机中的有符号数通常将最高位当作符号位,1代表复数,0代表正数。将符号数字化的数字称为机器数,将用+,-来代表政府的数字称为真值。

原码,补码,反码,移码⭐⭐⭐⭐⭐⭐

[注意!!]  极其极其极其重要的章节,这里我们默认字长都为8位

原码

用机器数的最高位表示数的符号,其他各位表示数的绝对值.

+1110 为00001110

-1110为10001110

我们可以看到在n+1位原码只有n为可以表示数值,所以他的表示范围就是-(2的n次方 -1)<=x<=2的n次方 -1

💀💀💀💀

原码中的0有+0和-0两种表示方式

补码

补码的表示被分为正数和负数两种,正数的补码和原码相同,而负数的补码是除了符号位各位取反,再加一。

补码变为原码与原码变为补码的方式一样,符号位不变,其余取反加一。

+1110 为00001110

-1110的原码为10001110,补码首先除符号位外各位取反,11110001,再加一11110010

我们可以看到,n+1位字长补码正数的表示范围与原码相同,负数最小为-2的n次方,即补码的表示范围是

-2的n次方 <=x<=2的n次方 -1

几个特殊的补码表示⭐⭐⭐

0的补码表示只有一种,即00000000

-1的补码表示为11111111

最大整数2的n次方-1:01111111

最小整数-2的n次方 :10000000

补码的相关计算:

[A]补-[B]补=[A]补+[-B]补

[B]补变[-B]补的快速方法是,连同符号位一起取反加一

反码

正数的反码与原码相同,负数的反码是原码除符号位取反即可。

计算机中一般不使用反码,它的作用大部分时间是中间的变换形式。需要注意的是在反码中0也有两种表示形式。

移码

移码用来表示浮点数的阶码,它的主要作用在之后的IEEE754和浮点数的运算中详细展示。

移码的简便实现方法是补码的符号位取反。但我们对于移码的正常方法要已知:

[x]移=2的n次方+x (2的n次方为偏移值)

  • 移码保留了数据原有的大小,所以用移码可以很方便的比较大小,移码越大,原来的数字就越大

  • 移码中0的表达是唯一的

  • 移码全0是真值的最小值-2的n次方 ,移码全1是真值的最大值2的n次方-1

2.1.3 整数的表示

C语言中的整数数据类型
  • char(8位)

  • short(16位)

  • int(32位)

  • long (32位)

有符号数和无符号数的转换

img

首先short是一个有符号数,转为机器数位1110 1111 0001 1111,把它变为无符号数时最高位的1不再代表负值,而是同样进入到数字的计算当中所以就是61252.

img

首先short是一个无符号数,转为机器数位是1111 1111 1111 1111,把它变为有符号数是时最高位代表符号位的“负”,又由于计算机中一般是使用补码表示,将其转为原码就是1000 0000 0000 0001故就是-1.

不同字长整数的转换

不同字长整数之间的转换分为大字长向小子长以及小字长向大字长两种模式

扩展方式也分为0扩展和符号扩展两种

大字长变小字长

由大字长向小子长转换时通常直接高位截断,即不属于小子长的部分直接截断去除,只保留属于小子长的数值部分。

img

将x和u分别变为二进制的表示形式为:

x: 0000 0000 0000 0010 | 1000 0110 1010 0001

u: 1111 1111 1111 1111 | 0111 0111 0101 0001

题目中是大字长变小字长,采取高位截断,即只保留右边部分,变为

x: 1000 0110 1010 0001 -34991

u: 0111 0111 0101 0001 30545

小子长变大字长

由小子长变大字长时需要进行扩展,无符号数使用0扩展,即高位补0,有符号数才有符号扩展,即高位增加与符号位相同的数字。

img

x: 1110 1111 0001 1111

将x变为有符号数 int类型的y,由于x是负数,所以高位补1,补满32位

y: 1111 1111 1111 1111 1110 1111 0001 1111 -4321

将x的无符号数,变为无符号数的v,高位直接补0,补满32位

v: 0000 000 0000 0000 1110 1111 0001 1111 61252

王道课后题错题二刷解决:

重点解释A和B选项,已知如果要想让移码的数值最大,那么就要将1放在高位,数值最小的话就要将1放在低位。首先A选项,偏移值为127时, 移码为00111111,则真值为移码减去偏移值,即00111111-0111 1111 = 11000000 即-64。B选项,偏移值为128时,移码为11111100,11111100-10000000=01111100即124

二进制小数所能代表的个数就是2的n次方,而十进制小数所能表示的个数是10的n次方。故两者之比就是A选项。这里可以举例理解:1位2进制小数可以表示0.1和0.0两个,两位可以表示0.00,0.01,0.10,0.11四个,所以就是2的n次方。而十进制同理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值