首页 > 其他分享 >《计算机科学导论》课后习题 第4章 数据运算

《计算机科学导论》课后习题 第4章 数据运算

时间:2023-11-22 15:02:28浏览次数:38  
标签:FF 运算 P4 计算机科学 99 课后 习题 溢出 Q4

如果您的答案与我不同,并有个人的理解,欢迎在评论区讨论。


一、复习题

Q4-1 算术运算和逻辑运算有什么区别?

A:算数运算时运用于整数和浮点数的加、减、乘、除运算。逻辑运算应用于位模式中的一个二进制位,或者在两个模式中相应的两个二进制位的相同基本运算。

Q4-2 在二进制补码格式的整数相加中,最左边一列是怎样进位的?

A:最左边一列的进位会被舍弃,因为分配给特定数据类型的内存空间是有限的。由于二进制补码格式中最左边一位代表正负号,所以如果出现进位,实际上是溢出了。

Q4-3 n的位分配单元可以等于1吗?为什么?

A:翻译令人迷惑,这里“分配单元”其实就是内存中分配的内存单元大小。比如在java编程语言中,定义一个int类型的数据,就是将4字节(即32比特)内存分配给了这个数据,用来表示一个32位的二进制补码整数;又,当我们定义一个boolean类型时,我们就将1比特分配给了这个数据,因为boolean的值只有true和false,即1和0。所以,我的答案是:可以。

Q4-4 解释"溢出"这个词。

A:在计算机科学中,“溢出”可以指代“算术溢出”、“缓冲区溢出”、“堆栈溢出”等情况,本问题中应该特指“算术溢出”,即执行单项数值计算时,计算结果大于寄存器或记忆体所能储存或表示的能力限制。详见:求闻百科·算数溢出

Q4-5 在浮点数的加法运算中,怎样调整指数不同的数的表示方法?

A:在一次浮点数的加法运算中,通常是调整指数较小的数,使其去规范化。通过在尾数中增加隐含的1,以及增加指数,尾数位移相应的位数,使得两数的指数统一。完成加法运算后,再将计算结果标准化。详见本书“附录J 实数的加减法”。

Q4-6 一元运算和二元运算有何不同?

A:一元运算只有一个输入,也就是只有一个数据参与运算。二元运算需要两个输入,也就是两个数据参与运算。

Q4-7 二元逻辑运算有哪些?

A:AND、OR、XOR。

Q4-8 什么是真值表?

A:真值表定义了对于每一种输入的输出值。详见:求闻百科·真值表

Q4-9 NOT运算符的作用是什么?

A:NOT运算符输出的是输入的反转

Q4-10 AND运算符的结果何时为真?

A:输入皆为真。

Q4-11 OR运算符的结果何时为真?

A:输入皆不为假。

Q4-12 XOR运算符的结果何时为真?

A:输入不同。

Q4-13 说出AND运算符本章讨论的一个重要特性。

A:如果一个输入中有一位是0,则不需要检查其他输入中的相应的位,便可迅速得到结果为0。这一特性在java编程中会被称为“短路运算”,具体可见我的这篇笔记:秦疆的Java课程笔记:29 基础 逻辑运算符 位运算符

Q4-14 说出OR运算符本章讨论的一个重要特性。

A:如果一个输入中有一位是1,则不需要检查其他输入中的相应的位,便可迅速得到结果为1。

Q4-15 说出XOR运算符本章讨论的一个重要特性。

A:如果输入中的一位是1,那结果就是与其他输入中相应位相反。

Q4-16 何种二元运算可以用来置位?掩码应该用什么位模式?

A:OR运算。掩码中的1位对第一个输入中相应的位进行置位,掩码中的0位使第一个输入中相应的位保持不变。

Q4-17 何种二元运算可以用来复位?掩码应该用什么位模式?

A:AND运算。掩码中的0位对第一个输入中相应的位进行复位,掩码中的1位使得第一个输入中相应的位保持不变。

Q4-18 何种二元运算可以用来反转?掩码应该用什么位模式?

A:XOR运算。掩码中的1位对第一个输入中相应的位进行反转,掩码中的0位使第一个输入中相应的位保持不变。

Q4-19 逻辑和算术移位间的区别是什么?

A:逻辑移位运算应用于不带符号位的数的模式,原因是这些移位运算可能会改变数的符号,此符号是由模式中最左位定义的。算术移位运算假定位模式是用二进制补码格式表示的带符号位的整数。算术右移被用来对整数除以2;而算术左移被用来对整数乘以2。这些运算不应该改变符号位(最左)。

二、练习题

P4-1 求下列运算的结果:

NOT 99=66
NOT FF=00
NOT 00=FF
NOT 01=FE
在模式层次的逻辑运算中,NOT其实就是求反码,还记得上一章练习题怎么给十六进制求反码吗?对,每位减去15。
我猜出题人是想让我们先转二进制。但这里姑且让我偷偷懒。

P4-2求下列运算的结果:

99 AND 99=10011001 AND 10011001=10011001=99
99 AND 00=10011001 AND 0000000=0000000=00
99 AND FF=10011001 AND 11111111=10011001=99
FF AND FF=11111111 AND 11111111=11111111=FF

P4-3求下列运算的结果:

99 OR 99=10011001 OR 10011001=10011001=99
99 OR 00=10011001 OR 0000000=10011001=99
99 OR FF=10011001 OR 11111111=11111111=FF
FF OR FF=11111111 OR 11111111=11111111=FF

P4-4求下列运算的结果:

某些运算结果上面都有,直接用。
NOT (99 OR 99)=NOT 99=01100110=66
99 OR (NOT 00)=99 OR FF=11111111=FF
(99 AND 33) OR (00 AND FF)=(10011001 AND 00110011) OR (00000000 AND 11111111)=00010001 OR 00000000=00010001=11
99 OR 33 AND (00 OR FF)=10011001 OR 00110011 AND (00000000 OR 11111111)=10111011 AND 11111111=10111011=BB

P4-5 要将一个位模式的最左4位复位(置0),求掩码和运算。

P4-5到P4-8都默认为8位二进制码。
A:AND 00001111

P4-6 要将一个位模式的最右4位置位(置1),求掩码和运算。

A:OR 00001111

P4-7 要将一个位模式的最右3位和最左2位反转,求掩码和运算。

A:XOR 11000111

P4-8 要将一个位模式的最左3位和最右2位复位,求掩码和运算。

A:AND 00011100

P4-9 用移位运算将一个无符号数除以4。

A:算术右移 2位

P4-10 用移位运算将一个无符号数乘以8。

A:算数左移 3位

P4-11 综合使用逻辑和移位运算求取一个无符号数的第4和5位。

A:原数为α。逻辑右移3位,AND 00000001,得到原数第四位。
原数α,逻辑右移4位,AND 00000001,得到原数第五位。
但是是否存在一个方法,不需要两次用到原数α呢?

P4-12 用8位分配单元,先把下列数转换成二进制补码,然后运算,再把结果转成十进制。

19+23=00010011+00010111=00101010=42
19-23=00010011-00010111=00010011+11101001=11111100=-4
-19+23=11101101+00010111=00000100=4
-19-23=11101101+11101001=11010110=-42

P4-13 用16位分配单元,先把下列数转换成二进制补码,然后运算,再把结果转成十进制。

A:略
太简单,也不存在溢出,位数太多纯折磨人。

P4-14 如果数字和结果都用8位二进制补码表示,下列哪个运算会溢出?

A:都不会溢出。

P4-15 如果数字和结果都用8位二进制补码表示,不通过实际的计算,我们能说出下列哪个运算会溢出吗?

A:第1,4项会溢出。

P4-16 假设数字皆以16位二进制补码表示法来存储,求结果。假设以十六进制表示法,结果又如何?

A:略。
看到16位二进制就不太想写。其中第2,3,4项都是溢出的。

P4-17 使用一个8位的分配单元,首先把下列每个数字转化为符号加绝对值表示法,进行运算,然后把结果转化为十进制。

A:
19+23先写成二进制符号加绝对值表示法,00010011+00010111
第一步,判断加减法:加法,不需要对减去的数字取反码。
第二步,判断两数符号异同,XOR运算:00010011 XOR 00010111=00000100,首位为0,符号相同。
第三步,绝对值相加:10011+10111=101010
第四步,检查是否溢出:否。
结果为00101010=42
因为太麻烦了,这里只写一个作为演示。符号加绝对值表示法的加减运算见附录I。

P4-18 计算下列使用 IEEE 127(参见第3章)的浮点数运算结果。

A:34.75+23.125,先分别写成IEEE 127码。
34.75=100010.11=0 10000100 00010110000000000000000
23.125=10111.001=0 10000011 01110010000000000000000
将两数去规范化,使得指数与统一为较高的指数,尾数增加隐含的1变成24位,写为:
0 10000100 100010110000000000000000
0 10000100 0101110010000000000000000
暂时忽略指数,将每个数的符号和尾数按照符号加绝对值的加减法运算(过程略)结果为:
0 10000101 111001111000000000000000
没有发生上溢,那就不需要调整尾数和指数。
再规范化(去掉尾数添加的1,尾数变回23位),结果为
0 10000101 11001111000000000000000=111001.111符合期望的结果。
因为太麻烦了,这里只写一个作为演示。详见附录J 实数的加减法。

P4-19 下列哪种情况永不会发生溢出?证明你的观点。

A:正整数加负整数,两个负整数相减。
证明正整数加负整数不会溢出:
在规定的取值范围(-c,c),对于任意c>a>0,0>b>-c,c>a+b>-c恒成立,不会发生溢出。
对于二进制补码表示法中出现的特殊情况,即当b=-c时,有a+b=a-c,则0>a-c>-c,即0>a+b>-c恒成立,不会发生溢出。
证明两个负整数相减不会溢出:
在规定的取值范围(-c,c),对于任意0>a>-c,0>b>-c,有c>-b>0,则c>a-b>-c恒成立,不会发生溢出。
对于二进制补码表示法中出现的特殊情况。
情况一:当b=-c,a≠-c时,a-b=a+c,则c>a+c>0,即c>a-b>0恒成立。
情况二:当a=-c,b≠-c时,a-b=-c-b,则0>-c-b>-c,即0>a-b>-c恒成立。
情况三:当a=b=-c时,a-b=0。
以上情况均不会发生溢出。

P4-20 把一个整数加到它的反码上的结果是什么?

A:结果是所有位变成1。

P4-21 把一个整数加到它的补码上的结果是什么?

A:根据整数加减法运算法则,加补码相当于减去原数,结果应该是0。

标签:FF,运算,P4,计算机科学,99,课后,习题,溢出,Q4
From: https://www.cnblogs.com/Acolyte/p/17849023.html

相关文章

  • 计算机科学与技术之网络编程 Windows下VC6.0 网络SOCKET编程C语言实现(服务端)
    在VC6.0平台用C语言实现网络SOCKET通信一.在VC6.0平台创建Win32ConsoleApplication工程工程名称自拟(或输入firstSocket)添加新建项文件C++SourceFile 文件名自拟,后缀.c(如firstSocket.c)在firstSocket.c加入头文件#include<winsock2.h>链接动态库#pragmacomment(l......
  • 什么是计算机科学和数据管理领域的 source of truth
    "SourceofTruth"(真实源)在计算机科学和数据管理领域中,是一个非常重要的概念。简单来说,"SourceofTruth"是指在一个系统或者应用中,为了确保数据的一致性和准确性,设置的一个权威性的数据来源或数据存储位置。在一个系统里,可能会有很多不同的数据源,这些数据源可能会有不同的版本,......
  • 《计算机科学导论》课后习题 第3章 数据存储
    一、复习题Q3-1说出5种计算机可以处理的数据。A:数字,文本,音频,图像,视频。Q3-2位模式的长度如何与其能表示的符号数量相关?A:以b代表位模式的长度,a代表能表示符号的数量:a=2^b。Q3-3位图方法是如何以位模式来表示一个图像的?A:“位图方法”即“光栅图”,通过“扫描”将图像以一定......
  • C语言程序代码练习题
    1.#include<stdio.h>voidmain(){chargrade[10];printf("请输入您的成绩等级:");scanf("%s",grade);if(stricmp("A",grade))printf("成绩等级为A");elseif(stricmp("B",grade))printf("成绩等级为B");elseif(stric......
  • rust程序设计(5)结构体相关练习题| 附带解答
    题目基础结构体练习:创建一个名为Person的结构体,包含name(字符串类型)和age(整数类型)两个字段。写一个函数,接收一个Person实例作为参数,并打印出这个人的名字和年龄。结构体方法练习:为Person结构体添加一个方法birthday,当调用时,它将这个人的年龄增加1。创建一个Person实例......
  • 计算机科学速成课
    建议看看计算机科学速成课,一门很全面的计算机原理入门课程,短短10分钟可以把大学老师十几节课讲的东西讲清楚!整个系列一共41个视频,B站上有中文字幕版。每个视频都是一个特定的主题,例如软件工程、人工智能、操作系统等,主题之间都是紧密相连的,比国内很多大学计算机课程强太多!这门......
  • 第六章 消息认证和哈希函数 —— 现代密码学(杨波)课后题答案解析
    第五章作业参考答案1.6.1.3节的数据认证算法是由CBC模式的DES定义的,其中初始向量取为0,试说明使用CFB模式也可获得相同的结果。解:设需认证的数据分为64比特长的分组,D1,D2,…,DN,其中DN不够64比特则右边补0,由题设,数据认证算法相当于在CBC模式中初始向量取为0,并按如下关系进行:   ......
  • 第七章 数字签名和认证协议 —— 现代密码学(杨波)课后题答案解析
    第六章作业参考答案1.在DSS数字签名标准中,取p=83=2×41+1,q=41,h=2,于是g≡22≡4mod83,若取x=57,则y≡gx≡457=77mod83。在对消息M=56签名时选择k=23,计算签名并进行验证。解:这里忽略对消息M求杂凑值的处理计算r=(gk modp)modq=(423 mod83)mod41=51mod41=10    k-1modq=......
  • 11.15【习题练习】
    内容:1:计算 n的阶乘2:1!+2!+.......+10!#include<stdio.h>intmain(){ inti=0; intn=0; intret=1; intsum=0; for(n=1;n<=3;n++) { ret=1;//没有ret=1这个条件就会使得ret具有累积效果,当n=3时,原先的ret=2被保留了下来,for进入 //计算就是ret=2*1(i......
  • 第五章 密钥分配与密钥管理 —— 现代密码学(杨波)课后题答案解析
    第五章作业参考答案1.在公钥体制中,每一用户U都有自己的公开钥PKU和秘密钥SKU。如果任意两个用户A,B按以下方式通信,A发给B消息(EPKB(m),A),B收到后,自动向A返回消息(EPKA(m),B),以使A知道B确实收到报文m,(1)问用户C怎样通过攻击手段获取报文m?答:当A发给B消息(EPKB(m),A)时,A的身份......