bits bytes and integer 2

无符号数加法

由于正数的补码和原码一样,下面所提到的 bit 既可以认为是补码,也可以认为是原码。

因为任何计算机用来存储 bit 的设备都是有限的,所以如果所需的用来存储两个数之和的 bit 位超出了硬件设备的 bit 位,最高位则会被丢弃。

假设有 bit 位 4 位,则能表示的所有状态为:

可以这些状态来分别代表 0-15 着 16 个数字。

不溢出

bit
加数 100011
加数 200011
和 (不忽略进位)00102
和 (忽略进位)00102

结论:期望值是 2,最后的结果是 2

溢出

这个章节,视频和课件对不上,课件在第 35 页,但是课程一开头就讲这个章节

2024041417451977.png

两个无符号数相加,如果最高位溢出了,会被丢弃。相当于真正的结果对 w 取模。

bit
加数 1110113
加数 201015
和 (不忽略进位)1001018
和 (忽略进位)00102

结论:期望值是 18,最后的结果是 2,相当于 18 对 16 取模

可视化(数学)整数加法

2024041417453501.png

从上图可以看出:

2024041417472452.png

从上图可以看出

补码加法

2024041417425203.png

两个补码的加法,看起来像是普通的加法。意味着想要减去一个数,可以加上它的负数。

不溢出

bit(补码)
加数 11101-3
加数 201015
和 (不忽略进位)1001018
和 (忽略进位)00102

结论:期望值是 2,最后的结果是 2

bit(补码)
加数 11011-5
加数 200113
和 (不忽略进位)1110-2
和 (忽略进位)0111-2

结论:期望值是 -2,最后的结果是 -2

负溢出

bit(补码)
加数 11101-3
加数 21010-6
和 (不忽略进位)1011118
和 (忽略进位)01117

期望值是 -9,最后的结果是 7

重点
两个负数相加,得到了正数,称为负溢出

正溢出

bit
加数 101117
加数 201015
和 (不忽略进位)1100-4
和 (忽略进位)0111-4

重点
两个正数相加,得到了负数,称为正溢出

https://www.bilibili.com/video/BV1iW411d7hd?t=728.0&p=3