【计算机本科补全计划】计算机的算数运算 +-*/

正文之前

今天是开始念书的第一天,果然没压力了就是不一样的啊!!十二点半睡觉,然后如果是考研期间,八点是最晚起来的, 但是今天八点多醒来一次,然后倒头继续睡,醒来一看 "十点半" ,心痛!我是个没有上午的男人!!!


正文

1、 加法

计算机执行的都是二进制的加法,也存在进位这个概念。那么对于ALU(算术逻辑单元)来说,当两个相加的数符号相同的时候,会存在最高位溢出的风险,所以最好是用第33位来表示最后是否进位(溢出),但是两个符号相异的数相加,就不存在这个问题,直接用32位寄存器表示结果即可:

  1101
  + 11
----------
 10000

2、 减法

减法其实就是把赋值表示为补码形式,然后与另一个数直接相加即可,转换后规则同加法
1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原

3、乘法

直接实例表示吧,慢慢讲原理实在是难懂而且还麻烦
被乘数:

1101(13)X 0101(5) = 01000001(65)

       1101  被乘数
 X     0101  乘数
      ----------
       1101
      0000
     1101
    0000
-------------------
   01000001(65)  乘积  
//上述就是二进制的乘法的运算过程,那么在加法器算术逻辑单元(ALU)中是如何实现呢? 

那么根据上述人类的算法,我们可以这样思考,首先腾出一个乘积的寄存器,初始化为0 ,然后执行下列的程序:


乘数右移想必大家都懂,但是为什么被乘数要左移呢?因为乘数右移之后,但是它所代表的数量级是不变的,这一位代表的是2^n次方,而不是代表个位,那么对应的,既然无法在乘数上体现出来,当然就只能改变被乘数了。得益于X2 可以改为左移这一二进制优化方案,每次对乘数的更高位操作,不需要改变其他的,只要对被乘数X2 即可,自然地,被乘数的左移其意义也就出来了, 就好像上面的例题中,第三步是要对原本的乘积加上四个1101(4*13=52) 那么我们只需要对被乘数左移两次,自然就得到了四个1101 也就是110100(也就是52)。跳出的条件是一般都是要执行完32次之后。

4、 除法

除法是最麻烦的,这一点毫无疑问。
被除数 = 商 X 除数 + 余数

          1001  (商)
(除数)- - - - - - 
1000 | 1001010 (被除数)
       1000
       -- --
          10
          101
          1010
          1000
          - -- -
            10 (余数)

上面是76/8=9 ··· 4的二进制除法表达式,可以看到,我们是对余数寄存器初始化为被除数,然后每次减一次除数具体的过程见下面的流程图:

除法的计算方法跟乘法有一定的共同之处,但是又很大程度上的不同,主要的区别的是引入了余数这个概念。并且并且巧妙地把除数放在64位寄存器的高32位,这样的话就可以避免一开始无法直接计算出要右移多少位才能正确的相减(这其实也是一种偷懒吧,毕竟前面起码有除数 位数次的空白计算循环)

5、 有符号的乘除

这个是很麻烦的一个处理项,虽然对于人类来说这个是一眼就能看出来的,但是计算机不一样。所以我们需要有别的机制保证有符号的计算的正确性。对于乘法,记住符号位,并且判定结果是正是负,然后最后的一次的时候加上即可,只有最高31位的乘法。除法则不一样。因为我们必须设置余数的符号,余数不能为负数,不然就会出现
(-7)/2 = -3 ···(-1) 还是 (-7)/2 = -4 ···(-1)

这两种看似都正确但是结果完全不同的情况。所以要保持被除数与余数的符号相同。那么我们可以得到下面的结论:

正确的有符号除法算法在源操作数的符号相反时商为负,同时要使得非零余数的符号与被除数的相同! 注意是被除数而不是除数和商!!

正文之后

有点时间我也会怀疑,每天这么写,至少一天要花一个小时到两个小时去排版,到底值得不?虽然目前还没看出多少效果来,粉丝数这事我也看得越来越淡,但是其实还是有好处,毕竟每天重温一次,并且相当于做读书笔记,感受书籍作者的思路,相当于自己重新编写一本书,还是不错的吼~~ 本篇笔记到此为止,昨晚整了下关于shell编程,估计今天晚上会出一篇 Linux Shell入门的文,希望喜欢!!

奉上美腿一只
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容