前言:感觉自己由于是电气工程专业出身,既然现在正在从事软件编程相关工作,同时兴趣也在这里,那么就应该将自身在软件编程方面的基础知识补充一下。通过这阵的面试了解和平常的了解,发现自己在计算机系统、linux内核、数据结构算法方面基础还需加强,虽然自己有意识地去理解,但我觉得还需要系统性地学习才行!
只记自己觉得有必要记的。
深入理解计算机系统---计算机系统漫游
1. 指针与数组索引哪个更高效?
答:指针效率更高,因为使用数组时,需要取得首地址->获取偏移->两者相加;而使用指针时,则仅使用专用的++指令即可;两者差距较小,知道即可。
2. 本地参数的访问和传参进来的访问哪个更高效?
答:不知道。。。
算数右移填充原数最高位在左边(即对于有符号数,正数填充0,负数填充1);
另外,对于无符号数,右移一定是逻辑右移,因为最高位不代表符号了。
另外,java比较特殊,x>>k,表示算数右移k个位;x>>>k代表逻辑右移k个位。
移动的位数不要超过被移动数字的位数,在c中没有明确标准说明结果是什么:
有符号数中,正数的补码和原码相同;负数的补码为原码除符号位之外所有位取反后,整体加1.
如果对int 和 unsigned int 进行对比,则会先把2个数字都看作无符号形式进行对比。