位运算在单片机操作中非常普遍,所以先写一下关于位运算的知识。
1.位运算操作符 | & ^ ~ << >> 分别对应 按位或 按位与 按位异或 按位取反 左移 右移
==按位或==:有1即为1,全0才为0;例如10 | 1
1010
0001
-------------------
1011
即10|1 = 11;tips:某个数在或1时,可将这个数的最后一位置1,再减1必使最后一位清0.
==按位与==:有0则为0;全1才为1;例如10 | 1
1010
0001
--------------------
0000
即10 & 1 = 0;tips:某个数在与1时,得到的是最后一位,可以快速的判断这个数的奇偶。
==按位异或==:同一位相同则为0;不同则为1;例如 10 ^ 2
1010
0010
--------------------
1000
即10 ^ 2 = 8;tips:如果10 ^ 2 之后再 ^ 2的话,则结果又返回到以前的结果
==按位取反==:将每一位的值做非运算
==左移,右移==:左移是将某个数的最右位补0;右移最某个数的最左位补0;例如1 << 1和1 >> 1
0001 0001
<<1 >>1
0010 = 2 0000 = 0
2.负数在内存中怎么储存。
http://blog.csdn.net/olddreamhyn/article/details/52003581,这位博主说的很详细很容易理解。