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 ...