CSAPP 第二章 信息的表示与处理(2) 整数运算

加减法运算

    所有的加法运算在内存中的运算都遵循二进制的计算法则,只不过因为相同二进制表示在不同整数类型下表示的数不同,运算法则也有所不同。

  无符号加法

    计算规则

      可以将无符号数的加法视作是一种模运算,在二进制表示中丢弃掉溢出的位的操作就等同于该数mod 2w-1,任何权重大于 2w-1的位只需简单舍弃即可。

      推导:将权重大于等于2w的位舍去(实际上只可能有1种舍去的情况,也就是舍弃第w位的“1”)。

    检验方法

      对于任意的x和y,只要二者相加的结果小于任何一个被加数,则出现了溢出。

      证明:因为对于任意x和y,有0<=x,y<2w,则产生溢出后x-2w的值一定小于0,也就是说y相当于减去了一个数,自然会比y本身小。

  无符号求反(减法)

      原理是用2w对2w取模后为0.

  补码加法

    计算规则

    检验方法

      当且仅当,两个正数相加后出现了负数或两个负数相加出现了正数,分别出现了正溢出/负溢出.

      证明:当两个正数相加出现正溢出时,得到的结果一定是个负数;当两个负数相加出现负溢出时,得到的结果一定是个正数;当正数与负数相加时,不会出现溢出

  补码取非

    基本原理

      由于补码可同时表示正数和负数,所以绝大多数(实际上只有一个数不满足)补码数的取反就是它的负数;但由于补码正负数取值范围的不对称性,需要特殊考虑最小的负数

    补码非的位级表示

      1.对每一位求补,再对结果+1即可得到非,即:-x=~x+1

      2.对二进制表示最右边的”1“的左边所有位进行求补,即可得到非。

      可以证明,这两种方法完全等价。

乘法运算

   无符号乘法和补码乘法

      无符号数乘法(原理与无符号加法大致相同):

      补码乘法:

      也就是说,无符号乘法和补码乘法具有相同的位级表示,只不过解读相同的二进制表示时的手段不同,无符号乘法和补码乘法具有位级等价性。

  计算机中乘法的计算方式

      在计算机中,乘法运算比移位运算、加法运算的代价要大得多,在计算乘法时,将其表示为移位运算和加法运算之和

      乘以2的k次方相当于左移位k位。

      例:

      计算机在计算乘法使用哪种方式与机器密切相关,取决于指令的相对速度。

除法运算

      我们只讨论除于2的幂,因为除以2的幂并不能像乘法一样推广到除以任意常数

  无符号除法:逻辑右移

  补码除法1:算术右移(向下舍入)

  补码除法2:引入偏置值(向上舍入)

      当执行算术移位时,有:

       ps:C语言一般执行向零舍入,也就是正数执行算术右移,负数需引入偏置值向零舍入

 

posted @   泽康  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示