这节课老师讲的比较多而且知识点也比较散,得好好整理一下梳理一下
1、语法有没有问题和有没有漏洞是两回事,编程的时候应该注意计算机的底层如何实现你的逻辑,要做到每一步都要在你的掌控范围之内。
2、漏洞经常由于一些变量的算术运算造成
3、电容来存储1、0
4、int x 声明一个变量,它的数据在机器内部连续的存储的
5、long在平台移植性上有关系,因为别的变量在不同的机器上被分配的字节数目是一样的,但是long的话会根据你系统而作出不一样的选择,不一样的选择就会影响到你程序的平台移植性。
6、typical 32-bit 寄存器就是32位 %eax.....寄存器(32位字长)
什么引脚都是32根
数据总线、内部寄存器、地址总线(32):跑的是地址信息(内存max 2的32次方个字节)--虚拟地址空间大小,指针大小,long型大小
在这里比较有趣的一个点是,我们如果地址总线为32位,那么我们可以访问多少个内存的地址单元呢?答案是2的32次方,那还是挺大的。64位机器就足足翻了一翻。
17、负数,符号位不参与反码。这句话是我总结的,就像我们的-7,在八位上存储,那就是
1111 1000+1=1111 1001
可以验证一下,-128+64+32+16+8+1=-7
这个是怎么得到的呢,首先最高位的符号位为1,确定了
1xxx xxxx
然后根据原码表示7
1(000 0111)
对源码部分反码加1
1111,1001即可得到正确的结果。
在这里我甚至会有一种自己的理解,为什么我们求补码的时候,是按位取反+1呢
我们可以想一下,我们,因为我们机器理解数据的特殊定义,符号位的值是-的2的存储位数-1次方,记为-v
负的挺多的对吧哈哈
但我们比如现在要表示-7,是不是想要加一些数来让负的没那么多?
根据我们的理解,即使把剩下的全部位都为1,那么我们这个sum和-v的绝对值还是差了个1
于是我们加了个1,这样子,我们sum和-v的绝对值就相等了。sum-v=0,这是一个极好的状态,现在我们想表示什么,就少加对应的值,即可表示负的这个数。
-7如何表示,那么其实就是“加的没那么多,加的少7”,所以我们之前把剩下的全部位都为1,改为,除了最低位的111变为0(表示+4+2+1=+7)
把上面的思想整理一下,那么就是
除了符号位为1
其余的位置表示为
要表示的负数的绝对值
的原码
的反码
+1
(我自己想的中间“0状态”理解法hh也不知道正确不正确。)
18、补码的优点为,可以让0只有一种表达,而且可以让减法变为加法
想一下,补码的0只可能是0000 0000(八位为例),没有正0和负0之说。
19、补码表示范围不对称(bug源头)取负,求绝对值操作有可能有致命安全漏洞 [+127,-128 ]
20、机器并不知道你怎么存储的,但是知道怎么读
21、补码中|min|=max+1,这个要这样子想哈哈,利用进位的思想,八位为例
1000 0000表示最小的值-128
0111 1111表示最大的数127
从绝对值的理解上,1000 0000=0111 1111+0000 0001
这样子不知道会不会好理解一些呢哈哈