计算机系统基础(四)——乘除运算及浮点数运算

整数乘法运算

1、xy被转换为乘法指令,在乘法运算电路中得到的结果也是一个n位整数,也即结果只取2n位乘积中的低n位
2、在计算机内部,一个整数x的平方可能是负数,这是因为在计算机中其结果取的是x
x的低n位乘积而高n位中的有效数位被丢弃而造成的。

/*
如何判断返回的z是正确值
*/
int mul(int x,int y)
{
	int z = x*y;
	return z;
}
//如何判断返回的z是正确值
!x || z / x == y 为真时

// 什么情况下,乘积是正确的呢?-2^n-1 <= x*y < 2^n-1(不溢出)时
/*
即:乘积的高n位为全0或全1,并等于低n位的最高位
即:乘积的高n+1位为全0或全1
*/

/*
若x、y和z都改成unsigned类型,则判断方式为
*/
乘积的高n位为全0,则不溢出  编译器判断
!x || z / x == y 为真时  程序员写程序

带符号整数乘法

无符号整数乘法

整数乘运算的溢出漏洞

带符号整数加法溢出判断程序

整数除法运算

整数除法的规则

对于带符号整数来说,n位整数除以n位整数,除-2^(n-1)/-1=2 ^ (n-1)会发生溢出外,其余情况都不会发生溢出。Why?
因为商的绝对值不可能比被除数的绝对值更大,因而不会发生溢出,也就不会像整数乘法运算那样发生整数溢出漏铜。

因为整数除法,其商也是整数,所以,在不能整除时需要进行舍入,通常按照朝0方向舍入,即正数商取比自身小的最接近整数(Floor地板),负数商取比自身大的最接近整数(Ceiling,天板)。

整除0的结果可以用什么机器数表示?
整除0的结果无法用一个机器数表示

整数除法时,除数不能为0,否则会发生**“异常”**,此时,需要调出操作系统中的异常处理程序来处理。

整除操作中的异常情况

在这里插入图片描述
第一种:用objdump看代码段一的反汇编代码,得知除以-1被优化成取负指令neg,故未发生除法溢出

第二种:为什么显示是“浮点异常”呢?

变量和常数之间的除运算

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

浮点数运算

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值