輸入乙個無符號長整數,將最高位元組與最低位元組互換,然後輸出。
將這個長整數中間兩個位元組迴圈左移n位(n要輸入),然後再輸出。
將長整數按照二進位制輸出,每8位輸出乙個空格。
一.位運算
& 與 兩者都為1,結果才為1;
| 或 兩者都為0,結果才為0
^ 異或 兩位相同位1,相異為1
~ 取反 0變1,1變0
利用了 &(3) 與 |
第二部分迴圈左移 (中間兩個位元組迴圈左移n位)
只有中間兩個位元組進行迴圈左移,高八位和低八位不變。
n = n %16;
mid = num &
0x00ffff00
;//擷取中間兩個位元組
print_ul
(mid)
; mid >>=8;
//右移到邊界
print_ul
(mid)
; mid <<= n;
//左移 中間作為分界線,左邊是迴圈移到右邊的,右邊是不變的
temp = mid &
0xffff0000
;//分界線左邊值
mid = mid &
0x0000ffff
;//把左邊部分去掉
temp >>=16;
// 補充到右邊
mid = mid | temp;
//合併
mid <<=8;
//移回中間
num =
(num &
0xff0000ff
)| mid;
//把高八位低八位安裝回來
/!!
!注意:unsigned long和unsigned int一樣只有4個位元組
#include
typedef unsigned long ul;
//二進位制列印
void
print_ul
(ul num)
; ul radix =2;
int count =0;
dowhile
(num)
; count =0;
for(
int i =
31; i >=
0; i--
)printf
("\n");
}int
main()
長整數加法運算 大數運算
問題描述 假設2個任意長度的整數x y分別由雙向鍊錶a和b儲存,現要求設計乙個演算法,實現x y。計算結果儲存在鍊錶c中。說明 由於a和b輸出時需要從頭至尾遍歷,而做加法時需要從尾至頭遍歷,因此使用雙向鍊錶儲存。可以從長整數的低位開始拆分 4位為一組,即不超過9999的非負整數 依次存放在鍊錶的每個...
C 用位運算實現迴圈移位
迴圈移位區別於一般移位的是移位時沒有數字的丟失。迴圈左移時,用從左邊移出的位填充字的右端。迴圈右移時,用從右邊移出的位填充字的左側。這種情況在系統程式中時有使用,在一些控制程式中用得也不少。例如 a 01111011,迴圈左移2位的正確結果是 b 11101101 b a 8 2 用來得到正常左移丟...
EOJ 3303 1的個數最多的整數(位運算)
題意 給定整數 a 和 b,輸出區間 a,b 中對應二進位制表示含 1 的個數最多的整數。如果存在多個解,則輸出符合條件的最小的整數。由於資料量較大,因此窮舉只能過50 的小資料,ab數值一大就超時。直觀地看,要讓區間 a,b 內1的個數最多,那就要在左界a的基礎上,在它的二進位制串上盡可能增加1,...