十二天深入理解计算机系统(二)

信息的表示和处理

理解字节序(大端、小端)

 可以参考博客大小端介绍以及判断

位级运算

一个有趣的应用使用异或实现两个元素之间的交换

void inplace_swap(int *x, int *y)

{

*y=*x^*y;

*x=*x^*y;

*y=*x^*y;

}

逻辑运算符和位级运算符的一个重要区别

如果第一个参数求值就能够确定表达式的结果,那么逻辑运算符就不会对第二个参数求值。

逻辑右移和算术右移的区别

例如[xn-1...x0],逻辑右移k位的结果为[0..0,xn-1..xk],算术右移k位的结果为[xn-1,xn-1..xn-1..xk]C语言中无符号的右移一定是逻辑的,有符号几乎所有的编译器/机器组合都对有符号数据使用算术右移。

5 C语言有符号和无符号数

-1<0u,大家猜想这个的条件是什么,是falseC语言隐式强制把有符号数转换为无符号数。

总结

数的表示,应该注意一些隐式转换,数据转换之间要注意。

posted @ 2013-12-10 22:15  TheBug  阅读(1333)  评论(0编辑  收藏  举报