《C程式語言》 練習2 8

2022-03-17 14:51:26 字數 1299 閱讀 6044

練習 2-8 編寫乙個函式rightrot(x, n),該函式返回將x迴圈右移(即從最右端移出的位將從最左端移入)n(二進位制)位後所得到的值。

write a functionrightrot(x,n)that returns the value of the integerxrotated to the right bynbit positions.

解題思路

這個題目我感覺可以有兩種理解方式

第一種就是預設二進位制位數,前面沒有多餘的0來補位,比如111的二進位制是1101  111,我就認為題目的函式對1101  111進行迴圈右移,就是把最右端的數字放到最左端,即1101  111

第二種這一種理解方式是比較符合實際的,就是計算機中二進位制數字是有規定的,比如有的計算機是32位

那麼111的二進位制就不是1101  111了,而是

0000  0000 0000 0000 0000 0000 0110 1111(在前面補了25位0,對數值大小無影響)

那麼我們把最右端的乙個數字放到最左端就是1000  0000 0000 0000 0000 0000 0110 111結果顯然與第一種不同

思路一**:

#includeint rightrot(unsigned int x , int n)

ribits = (~(~0<>n) | ribits;

return x;

}int main()

執行輸出

思路二**

#includeunsigned rightrot(unsigned x, unsigned n)

return x;

}int main()

執行結果

C語言 練習2 8

練習2 1 編寫乙個函式rightrot x,n 該函式返回將x迴圈右移 即從最右端移除的位將從最左端移入 n 二進位制 位後所得到的值。第一種解法思路 每次將 x最右端右移1位 與 該位左移到最左端 進行 或運算 這樣進行n次迴圈即可。實現 如下 includevoid main rightrot...

C語言程式設計練習28 大數取模

題目描述 現給你兩個正整數a和b,請你計算a mod b。為了使問題簡單,保證b小於100000。輸入 輸入包含多組測試資料。每行輸入包含兩個正整數a和b。a的長度不超過1000,並且0輸出 對於每乙個測試樣例,輸出a mod b。樣例輸入 copy 2 3 12 7 152455856554521...

C語言程式設計練習

1 給你任意三個整形資料,找出其中最大乙個整形數。include main int findmax int x,int y,int z else if z max return max 使用函式 三目運算子 include int main int findmax int x,int y 2 求1 ...