ACM_位运算总结

~  |  &  ^  <<  >>

这些都是按位运算,什么意思?就是一位一位的进行运算。

 所以 ! 和 ~ 是不同的。

基本的操作:

and   —–   &

or     —–   |

取反  —–   ~

异或  —–   ^

同或  —–   ~(^) // 异或后求反

<<(左移)    >>(右移)

(真值表很容易在网上搜到,就不列了)

这5个基本的运算可以求出很多意想不到的东西。

下面是一些自己总结的:

一般位运算分为:取位操作、改位操作、功能性的操作。

取出某个数的某一位:

《ACM_位运算总结》
《ACM_位运算总结》
get_bit

bool get_bit(int t,int x) {
// 在 t 中,取出第 x 位 --从零开始
return t & (1<<(x));
}

 取出最低位:

《ACM_位运算总结》
《ACM_位运算总结》
lowbit()

#define lowbit(x) x & (-p)

改位:

《ACM_位运算总结》
《ACM_位运算总结》
change_bit()

//return int !

// 设置 x 的第 ith 位为 bool
#define set_bit(x,ith,bool) ((bool)?((x)|(1<<(ith))):((x)&(~(1<<(ith)))));

// 设置 x 的从第 ith 位起连续 k 位 为bol
int set(int x,int ith,int k,int bol)
{
while(k --)x = set_bit(x,ith+k,bol);
return x;
}

 要回寝室了,明天继续总结!

 11.11.21 10:00 补充:

《ACM_位运算总结》
《ACM_位运算总结》
摘自USACO的summary

a |= 0x20;        /* turn on bit 0x20 */
a &= ~0x20; /* turn off bit 0x20 */
a ^= 0x20; /* toggle bit 0x20 */
if (a & 0x20) {
/* then the 0x20 bit is on */
}

 一个位运算的地址:http://www.matrix67.com/blog/archives/266

 

 

    原文作者:位运算
    原文地址: https://www.cnblogs.com/DeathKid/archive/2011/11/13/2239461.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞