0x55555555等 與移位

2021-10-06 16:07:19 字數 919 閱讀 8500

0xaaaaaaaa = 10101010101010101010101010101010 (偶數字為1,奇數字為0)

0x55555555 = 1010101010101010101010101010101 (偶數字為0,奇數字為1)

0x33333333 = 110011001100110011001100110011 (1和0每隔兩位交替出現)

0xcccccccc = 11001100110011001100110011001100(0和1每隔兩位交替出現)

0x0f0f0f0f = 00001111000011110000111100001111 (1和0每隔四位交替出現)

0xf0f0f0f0 = 11110000111100001111000011110000 (0和1每隔四位交替出現)

(num & 0x55555555) << 1)

((x & 0x55555555) << 1 --- 奇數字移到偶數字

((x >> 1) & 0x55555555); --- 先右移一位,等於拿到奇數字

例題:配對交換。編寫程式,交換某個整數的奇數字和偶數字,盡量使用較少的指令(也就是說,位0與位1交換,位2與位3交換,以此類推)。

class solution 

};

將(x&(0x55555555))<<1; x按位與0x55555555後得到的二進位制奇數字與x相同但偶數字均為0,然後再向左移一位,變成偶數字為原來的奇數字,且移動後奇數字全為0;

將(x&(0xaaaaaaaa))>>1; x按位與0xaaaaaaaa後得到的二進位製偶數字與x相同但奇數字均為0,然後再向右移一位,變成奇數字為原來的偶數字,且移動後偶數字全為0;

最後將兩個二進位制按位或((x&(0x55555555))<<1) | ((x&(0xaaaaaaaa))>>1),便最終得到了交換後的數。

關於0x0d與0x0a的ASCII。

今天發現乙個有趣的現象 在 ma 我用的版本是6.11 中作彙編時發現,0x0d與0x0a有著不同的作用。比如 dead for dream 在這個字串後只加上0x0d則得到 游標移到開頭的那個d下面,而沒有換行 再輸入字元的話,將原來的字元著改掉。在這個字串上只加上0x0a則得到 游標移到末尾m字...

C 中 x與0x的區別

首先這兩個均表示16進製制,但是用法有所不同。x主要是用於字元的表示 如char ch xa 那麼ch這個字元所代表的是什麼呢?正如上面所說的 x代表的是16進製制,16進製制中的a在十進位制中代表10,那麼ch這個數就代表著序號為10的ascii碼所代表的字元,即 n換行符。0x雖然也代表十六進製...

0x13 鍊錶與鄰接表

這東西我還是有點會玩的啊。鄰值查詢這東西不就是維護個前驅後繼嘛。include include include include include include using namespace std struct node a 110000 bool cmp node n1,node n2 int ...