巨集函式實現乙個數字二進位制的奇數字和偶數字交換

2021-08-20 04:16:06 字數 767 閱讀 3276

巨集函式在c語言程式設計中有不可忽視的作用,並且數字二進位制的奇偶位交換也比較常見,所以用巨集函式來實現數字二進位制的奇數字和偶數字交換不失為乙個很好的方法。

首先我們要清楚巨集函式的用法,其次要有用巨集函式實現該功能的整體思路,下面我帶著大家分析一下:

例:將數字5(0101)交換二進位制奇偶位為(1010)即數字10。

就是將數字的二進位制的第0位和第1位交換,第2位和第3位交換,後面以此類推。

首先我們需要將奇數字和偶數字提取出來,通過位操作運算子將兩個合併成交換後的數字。

例:設需要變換的數字為x,

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

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

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

注意:這裡用十六進製制的數值進行按位與操作十分方便,不需要將原本的十進位制轉換,直接位操作便可修改二進位制返回之後仍為十進位制!

求乙個數字二進位制中 1 的個數

任意給定乙個 32 位無符號的整數 n,計算 n 的二進位制表示中 1 的個數,比如 n 3 011 時,返回 2 通過移位解決,每次向右移一位 1 然後判斷最後一位是不是 1 1 最多迴圈 32 次 int bitcount unsigned int n n n 1 return count 使用...

統計乙個數字中二進位制位1的個數

題目詳情 給乙個二進位制數,其中負數用補碼表示,問其中二進位制 1 的個數。思路1 在計算機中,其實為了運算的方便,負數都是用二進位制的補碼表示,也就是說,我們對其進行位運算其內部加法器的實現都是先轉化成補碼 詳見組成原理 對於這題有以下幾個思路 code class solution return...

二進位制 二進位制中1的個數

題目 請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中 1 的個數。例如,把 9 表示成二進位制是 1001,有 2 位是 1。因此,如果輸入 9,則該函式輸出 2。示例 1 輸入 00000000000000000000000000001011 輸出 3 解釋 輸入的二進位制串 0000000...