Promise nginx反向代理 log4j bash vue安装教程 后台页面模板 matlab读取dat文件 matlab根号怎么打出来 微信pc版无法获取二维码 oracle自增长 配置tomcat环境变量 dplayer不能全屏 oracle增加主键 完美解决cpu利用率低 pythonlist java结束线程 java配置文件 网络适配器驱动 props 骁龙660和625 python的用途 网络克隆 js获取子元素 s10截屏 0x000007a 网络电子书 jquery下载 回收站在哪个盘 例外被抛出且未被接住 追评可以删除吗 total同级生2下载 360街机三国 ajax上传文件 信安ca玛维的踪迹 苹果耳机没声音 苹果视频剪辑 数据软件 python遍历列表 ae复制图层 ps铅笔笔刷
当前位置: 首页 > 学习教程  > 编程语言

大二上,计组原理笔记(1)

2020/9/19 13:35:48 文章标签:

一、9月15号第二章

无符号数

计算机中无符号数的核心就是进制转换。常用的是十进制(D)、二进制(B)、八进制(O也经常用Q)、十六进制(H)之间的转换问题。

带符号数(有符号数,即正、负数)

带符号数可以用原码、反码、补码、变形补码、移码表示。(都是二进制表示形式,一组01串)
原码:计算机无法识别正负号,于是约定编码的首位为符号位。正号(+)用0表示,负号(-)用1表示。正负号之后的数值用进制转换转为二进制数(无符号数方法)
正数的原码、反码、补码一样。
反码(负数):在原码的基础上,符号位不变,数值位按位取反。作用:反码的引入是为了引出补码。
补码(负数):在反码的基础上,加一(符号位参与运算)。作用:将减法转化为加法。
变形补码:在反码的基础上,符号位扩展,重复一次。作用:判断运算时是否溢出。
例:写出“-9”在计算机中的表示形式
解:符号位:-,用1表示;数值的二进制表示为:1001
原码:11001
反码:10110
补码:(10110+1=)10111
变形补码:110111
那你能写出“+9”在计算机的表示形式吗?
解:符号位:+,用0表示;数值的二进制表示为:1001
原码:01001
反码:01001
补码:01001
变形补码:001001
那来看看这个代码的输出结果是什么(计算机中用补码表示):

#include<iostream>
using namespace std;
int main()
{
short int n=-1;
cout<<(unsigned short int)n<<endl;//将短整型强制类型转换为无符号短整型
}

输出结果是:65535
你做对了吗?
原理:
short int 为短整型,为2字节,所以有16位
求-1在计算机中具体存储为:
-1的16位二进制表示原码为:1 0000 0000 0000 001
反码:1 1111 1111 1111 110
补码:1 1111 1111 1111 111
所以计算机中-1的具体存储为补码: 1 1111 1111 1111 111,这个补码表示的无符号数为:216-1=65535。

原码和补码表示的范围(4位二进制数):

原码:首位为符号位,后三位为数值。
最小值就是符号为负时,数值最大的。即1111。即-7
最大值就是符号为正时,数值最大的。即0111。即+7
然而:4位二进制数有16个编码,原码从-7到+7只表示了15个数,为什么呢?
因为0在原码中占了+0,-0两种编码。
+0为:0000,-0为:1000
补码
有一个很特殊很特殊的编码:1000。
原码1000(-0)的补码是0000,而原码0000的补码也是0000(舍掉了10000中溢出的1),所以在补码中+0,-0的编码只有一种:0000。于是在原码中将1000看为-8。
于是1000(-8)是补码表示的最小值,补码表示的最大值仍然是0111(+7)。
总结
原码:(1111,0111)即(-7,+7)
补码:(1000,0111)即(-8,+7)

几个例题(默认计算机中用补码)

例1:计算机中如何对3-2进行运算。
3-2即(+3)+(-2)
3即+3的补码为:0011(原、反、补码都是)
-2的补码为:1110(1010反码为1101,再加1,补码为:1110)
将这俩补码送到加法器中进行运算:0011+1110=0001(舍掉了10001中溢出的1)。
0001在计算机中为补码形式,转换为原码仍然是0001(+1),因为它是正数。
则结果的补码0001代表的数为+1。即3-2=1。
例2:计算机中对-2-1进行运算的过程
-2-1即(-2)+(-1)
-2的补码为:1110(1010反码1101,再加1,补码是1110)
-1的补码为:1111(1001反码1110,再加1,补码是11101)
将这俩补码送到加法器中进行运算:1110+1111=1101(11101舍去溢出位1)
1101的原码是对其再求一次补码:1010+1=1011
1011即-3。
变形补码的意义
例3:-6-4
-6的补码:1010
-4的补码:1100
1010+1100=0110(1 0110)
而0110的原码为0110,即+6。由结果可知出问题了,为啥呢?
我们知道-6-4=-10,而四位二进制最小可表示的:原码为-7,补码为-8,-10超出了可表示的范围,于是这个属于溢出问题。
这就是引入变形补码的意义:
-6的变形补码:11010
-4的变形补码:11100
11010+11100=10110(1 10110)
而前两位为10,不一致,说明运算出现了溢出问题。

4位二进制扩展为8位(原,补码)

原码:

整数:符号位和数值位之间加0
例:-4的原码为1100,其中首位1为符号位,110为数值位,所以可以在符号位和数值位之间加0,即1 0000 100。(-00···04=-4的原理)
例:4的原码是0100,扩展为:0 0000 100
纯小数:最后补0
-0.5的原码为1.100,在最后补0,扩展应该是:1.100 0000,(-0.5=0.500···的原理)

补码:

整数:符号位扩展。
例:1000(记住是-8)的扩展应该是1 1111 000(-8的8位补码)
求1 1111 000表示的原码(再求补码):1 0000 111+1=10001000即-8。
例:当0101(+5)的扩展应该是:0 0000 101(+5的8位补码,也是原码和反码)所以也可以将正数的原码,反码扩展统一为一种。
纯小数:最后补0
-0.5的补码为1.011+1=1.100,扩展为8位应该是:1.100 0000 (-0.5的8位补码)
求1.100 0000 表示的原码:1. 011 1111+1=1.100 0000即-0.5

例:将符号数:0100、1010扩展为8位表示
(1)0100为正数。
若表示整数:+4,原码或补码扩展都为:0 0000 100
若表示小数:-0.5,原码或补码扩展都为:0100 0000
(2)1010为负数。
若为整数:-2,原码扩展为:1 0000 010
                         补码扩展为:1 1111 010
若为小数:-0.25,原码或补码扩展都为:1 010 0000

几个典型例题

例1: [ X ] 补 [X]_补 [X]=1001,求 [ − X ] 补 [-X]_补 [X]=?

例2: [ X ] 补 [X]_补 [X]=1101,
[ − X ] 补 [-X]_补 [X] [ 2 X ] 补 [2X]_补 [2X] [ 4 X ] 补 [4X]_补 [4X] [ X / 2 ] 补 [X/2]_补 [X/2]分别=?

例3:写出- 3 16 {3}\over{16} 163的原码、补码、变形补码。

答:
(1)
[ X ] 原 [X]_原 [X]= [ [ X ] 补 ] 补 [[X]补]_补 [[X]]=1110+1=1111,
[ − X ] 原 [-X]_原 [X]=0111,
[ − X ] 补 [-X]_补 [X]=0111(正数)。
(2)
a.
[ X ] 原 [X]_原 [X]=1010+1=1011,
[ − X ] 原 [-X]_原 [X]=0011,
[ − X ] 补 [-X]_补 [X]=0011
b.
基础法: [ 2 X ] 原 [2X]_原 [2X]= [ − 6 ] 原 [-6]_原 [6]=1110,
所以 [ 2 X ] 补 [2X]_补 [2X]=1001+1=1010
先看原理:十进制:1 × \times × 10=110,可以看成是小数点右移1位。同理二进制:1 × \times × 10=10,看成是小数点向右移动一位。(十进制表示:1 × \times × 2=2)
所以:
[ 2 X ] 补 [2X]_补 [2X] [ 2 X ] 原 [2X]_原 [2X]的小数点向右移动一位:
[ 2 X ] 补 [2X]_补 [2X]=1010(1 1010)
c.
[ 4 X ] 补 [4X]_补 [4X] 4X=-12,
向右移两位:11 0100,为正数,负数 × \times × 4不可能为正数。
原因:
超出了四位能表示的范围,溢出错误。
d.
[ X / 2 ] 补 [X/2]_补 [X/2] [ X ] 补 [X]_补 [X]的小数点向左移动一位,空出来的要补符号位。
即1101.1
(3)
将- 3 16 {3}\over{16} 163看成:-3 × \times × 2-4
即1011的小数点向左移动4位


本文链接: http://www.dtmao.cc/news_show_200030.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?