二进制的学习总结
二進制的基礎
and & (按位取與) 1 & 1 ?= ?1 1 & 0 = 0 0 & 0 = 0 0 & 1 = 0
or ? ?| ? ?(按位取或) 1 | 1 = 1 1 | ?0 = 1 0 | 0 = 0 0 | 1 = 0
xor ? ?⊕/^? (按位異或) 1⊕1 = 0 1⊕0 = 1 0?⊕0 = 0 0?⊕1 = 0
? lsh? << (邏輯左移)將二進制數(shù)向左移動x位造成二進制數(shù)右邊不足用0補足,左邊高位溢出
??rsh >> (邏輯右移)將二進制數(shù)向右移動y位造成二進制數(shù)左邊補足用0補足,右邊高位溢出
? not ? ?~ ??(按位取反) 每一位0變1,1變0
注意:二進制操作的優(yōu)先級好像很低,所以進行計算時可以多打?qū)懤ㄌ?/span>反正又不會累死
二進制的基本操作
讀取x的第pos個二進制位: (x >> pos)& 1;
讀取x的第pos位開始的cnt位: (x >> pos)& ((1 << cnt) - 1);
將x的第pos位置為1: (1 << pos)| x;
將x的第pos位置為0: (~(1 << pos))& x;
將x的第pos位取反: (1 << pos) ⊕?x;
將x的末尾的1提取出來: x & (x ⊕ (x + 1));
二進制中最低位的一個1的位置: ??? lowbit(x) = x & (-x);
遍歷二進制中所有的1的位置: for(; x; x -= lowbit(x));
判斷一個數(shù)的奇偶性: ? (x & 1) ? 偶數(shù) : 奇數(shù);
對2的冪取模 : ? x & ((1 << y)? - 1)
二進制表示集合
枚舉子集 for(int i = x; i ; i = (i & (i - 1));
?
轉(zhuǎn)載于:https://www.cnblogs.com/2020pengxiyue/p/9322134.html
總結(jié)
- 上一篇: 事物与数据库底层数据
- 下一篇: spring中的IOC和AOP