程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c語言-這個C語言函數聲明意思?

c語言-這個C語言函數聲明意思?

編輯:編程綜合問答
這個C語言函數聲明意思?

編寫一個函數,該函數將一個unsignedint中的所有位向左旋轉指定數量的位。例如,rotate_l(x,4)將x中的所有位向左移動4個位置,而且從左端丟失的位會重新出現在右端。也就是說,把從高位移出的位放入低位。在程序中測試該函數。
int rotate_l(unsigned int number, unsigned int bit)
{
unsigned int i;
unsigned int hign = 8 * sizeof(unsigned int);//最高位
for (i=0; i<bit; i++)
if( number&( 1<<(hign-1) ) ) number = (number << 1) | 1;
else number = number << 1;
return number;
}
求每一步詳解啊。。。

最佳回答:


手機看到的,看著代碼可移植性有亮點,手機不好碼字,特意到電腦跟前回答下。
int rotate_l(unsigned int number, unsigned int bit)
{
unsigned int i;
unsigned int hign = 8 * sizeof(unsigned int);**/*用sizeof,充分考慮到可移植性,這裡舉例:unsigned int若為4B,high結果為32,代表number的比特位數*/**
/*整個for循環實現了循環移動bit位*/
for (i=0; i<bit; i++)
if( number&( 1<<(hign-1) ) ) number = (number << 1) | 1;
/* 1<<(hign-1)在此處為1<<(32-1),即為1左移31位,數值為(10000...000,31個0),只有最高位為1的數值,然後與number按位與,判斷number最高位是否為1,若為1,則將number左移一位,最低位補零,再與1按位或,最低位變1。從而實現最高位為1時,循環移動到最低位上 */
else number = number << 1;**/*繼續上面,number最高位為0時,直接左移一位,number最高位0移除,最低位補零*/**

return number;

}
不過建議循環前使用一個變量存貯1<<(hign-1);不用每次循環都反復計算一遍。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved