前段时间看了斯坦福大学的编程范式公开课,第一课讲到补码的时候印象非常深刻,我发现名校名师都有一个特点,就是把讲课当做一回事,当做一个真正的事业来做,你可以从他讲课的流程方式就可以看得出他对这堂课用了多少工夫,而且不是企图一劳永逸的,而是时刻准备的去更新新的知识内容。
联想到在我当优课联盟当助教的这段时间里,也是颇为感触,同形形色色的老师交流过,也看过各式各样的在线课程。发现真正去传道授业解惑的老师,他一定是投入大量时间和精力在自己的课程内容上,和自身的成长上,并且他们都会做出很好的成绩并深受学生爱戴和欢迎,对于助教工作来说,能和这样的老师认识交流也是很愉快很成长的过程。
在现在大学老师都在纷纷做研究发paper,评职称,做生意,谋利益的时候,能遇到一个花大量时间打造自己课程为学生学习助力的老师的时候,真的是肃然起敬,作为学生,也忍不住要好好学习起来了。
围绕这个课程我有时间将笔记慢慢整理起来写成一系列的笔记吧,最近发现在本子上去写课程笔记没有用电脑敲字写的快了,看来真的是熟能生巧了。
二进制数补码小记
计算机中的整数是用什么码存储的?
答案是无符号类型是用原码存储,
有符号类型的正数用原码存储,
有符号类型的负数是用有符号正数的补码表示并存储的。
这个我以答案写在知乎上,以下:
补码是用来表示有符号的负数,不是signed numbers都用补码表示,signed numbers中正数的依然是以原码形式保存,
对有符号数取补码一方面好处是方便计算机进行有符号运算,
另一方面好处就是求有符号正数的补码时,可以自动将符号位处理一并处理了。
例如7的
原码:0 000 0111 (此时符号位为0,表示正数)
补码:1 111 1001 (前面的符号位自动在取补码的时候转换了)
计算机用此时7的补码来表示-7,这样有符号的负数运算就可以用电路实现:
0000 0111
+ 1111 1001
= 0000 0000
但是,这里需要注意一下,一个有符号负数求补码的话,此时不能顺便将符号位一并处理了,
需要单独将符号位孤立起来,剩下的部分再取反加一求补码,例:
-7二进制有符号数:
1 0000111
其补码:
1 1111001
所以,有符号二进制数在计算机里都是以补码的形式存在的,
即,有符号的-7是1000 0111,但在计算机里是以1111 1001形式储存的。