Abstract
本人正在学习Stanford CS107。这门课很不错,我简单把这门课的信息说一下。
key | value |
---|---|
官网 | https://see.stanford.edu/Course/CS107 |
课程名 | 编程范式 |
所需基础 | C,C++,数据结构与算法 |
上课视频 | Bilibili搜索 https://www.bilibili.com/video/av9789206 (可能会失效) |
我做的作业 | https://github.com/peanwang/stanford-cs107 |
Assignment Task
这次的作业是以回答问题为主,而不是编程,所有我把几个好的问题记录在此。
Problem 1: Binary numbers and bit operations
① 使用bit operations(与或非,异或)计算一个数除以4的余数?
把该数用二进制表示,会发现高位都是4的倍数,只有第一位和第二位不是,(1,2,4,8,16)
所以答案是
Num & 3
同理:计算一个数除以2的余数,
Num & 1
在LeetCode的数学分类里:有很多这样的bit题。
② 使用bit operation,去数的相反数
相反数的操作是 取反+1,即
(num^-)+1
//或者
~num+1
③设a,b两数
有 (a ^b) ^b = a
#include <stdio.h>
#define KEY ‘Z’
int main(void)
{
int ch;
while ((ch = getc(stdin)) != EOF)
putc(ch ^ KEY, stdout);
return 0;
}
Problem 3: It’s just bits and bytes
这个问题是使用gdb查看内存。查看内存的命令是
x/FMT ADDRESS
FMT : n 打印几个单位
format o(octal). x(hex) d(decimal) u(unsigned) t(binary) f(float) c(char)
b(bytes) h(halfword) w(word) g(double word)