長整數(位運算,迴圈移位)

2021-10-22 22:11:33 字數 1387 閱讀 6783

輸入乙個無符號長整數,將最高位元組與最低位元組互換,然後輸出。

將這個長整數中間兩個位元組迴圈左移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,...