首页 > 其他分享 >CSAPP 第二章 信息的表示与处理(2) 整数运算

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

时间:2024-02-04 17:45:36浏览次数:27  
标签:CSAPP 正数 运算 补码 负数 2w 第二章 乘法

加减法运算

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

  无符号加法

    计算规则

      可以将无符号数的加法视作是一种模运算,在二进制表示中丢弃掉溢出的位的操作就等同于该数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语言一般执行向零舍入,也就是正数执行算术右移,负数需引入偏置值向零舍入

 

标签:CSAPP,正数,运算,补码,负数,2w,第二章,乘法
From: https://www.cnblogs.com/zekang666/p/18001671

相关文章

  • 《程序是怎样跑起来的》第二章读后感
    第二章的题目是数据是用二进制表示的,我从第二章了解到了计算机的内部结构基于集成电路,这些元件的针脚只能有两种状态:0V和5V。由于这种二元特性,计算机采用二进制系统来处理和存储数据。在二进制中,8个二进制位组成一个字节,而字节是计算机信息处理的基本单位。二进制数与十进制数一......
  • 13 - 运算符
    运算符汇总参考资料:菜鸟教程:python3运算符Python文档:运算优先级算术运算符以下假设变量a=10,变量b=21:运算符描述实例+加-两个对象相加a+b输出结果31-减-得到负数或是一个数减去另一个数a-b输出结果-11*乘-两个数相乘或是返回一个被重复......
  • 读《程序是怎样跑起来的》第二章有感
    第二章的题目——数据是用二进制表示的,作者深入剖析了数据的二进制表示方法。首先我了解到为什么用二进制数表示计算机信息的原因,计算机内部由IC这种电子部件构成的,IC是有不同的形状,并且有引脚在IC内部,所有引脚只有0V和5V两个状态。IC的一个引脚只能表示两种状态,这个特性决定计算......
  • Python 矩阵运算
    #coding=utf8fromrequests.sessionsimportsessionimportpubimportnumpyasnpimportdatetimeimportosfromapscheduler.schedulers.blockingimportBlockingSchedulerdefget_default_conn():  conn=(host="127.0.0.1",  port="3306&......
  • 《程序是怎样跑起来的》第二章“数据是用二进制数表示的”
    在读过本书第二章后,我也对二进制数有了更深刻的印象,2.1向我们解释了为什么用二进制数表示计算机信息的原因,介绍了计算机的一种电子部件IC,也介绍了计算机处理信息的最小单位——位,2.2讲述了什么是二进制数,其中提到了一种思维方式,2.3讲述了移位运算和乘除运算的关系以及什么是移位运......
  • 第二章:基础查询与排序
    第二章:基础查询与排序2.1SELECT语句基础2.1.1从表中选取数据SELECT语句从表中选取数据时需要使用SELECT语句,也就是只从表中选出(SELECT)必要数据的意思。通过SELECT语句查询并选取出必要数据的过程称为匹配查询或查询(query)。基本SELECT语句包含了SELECT和FROM两个子句(clause)......
  • 位运算找是否有相同元素
    vector<string>words={"abcw","asd","awgf","dggg"}for(inti=0;i<n;++i){for(charch:words[i]){mask[i]|=1<<(ch-'a');}}给定string“abcf”初始:mask:00000000(一)对于......
  • 我对二进制的运算和用途的认识与思考
    在初步了解计算机的“大脑核心“CPU之后,对于计算机是如何处理数据、指令、函数的流程有了大致的逻辑认知。在阅读过有关二进制的知识后,对于计算机构成和运行有了更深的了解,主要分为对于二进制的运算和用途的思考。首先,作为计算机核心的CPU同其他计算机组件一样,都属于IC集成电路的......
  • 《程序是怎样跑起来的》第二章读后感
    又到了每周的读书分享,本周分享《程序是怎样跑起来的》第二章的读后感。第二章,数据是用二进制数表示的,计算机内部是由IC这种电子部件构成的,IC的所有引脚,只有直流电压0V和5V两个状态。IC的这个特性,决定了计算机的信息数据只能用二进制来处理。通过第二章,我了解了二进制转换为十进......
  • (坚持每天写算法)算法学习与复习part1基础算法1-13——位运算
    最近确实有在写算法,在写dp,之前学的时候不全,被计数,树型等dp折磨了一下。位运算是将重点放在数字的位上,通常作为辅助行动,比如状态dp,有的时候是为了节省时空复杂度而使用的。这是今天的题目: 位运算应用的情况除了上面讲的,还有单纯的位问题,上面的题目就是一个例......