久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
愛上位運算
[打印本頁]
作者:
51黑tt
時間:
2016-3-6 02:09
標題:
愛上位運算
緣起:C語言區別于其它語言的重要特點是支持位運算,使其能夠完成匯編語言所能完成的大部分功能。但是學校開設的C語言課程中老師往往將位運算這一章一代而過,好像這一張根本不重要。但是在實際的編程中借助于位運算往往可以設計出簡潔的算法,使程序簡化,并且獲得較高的效率。而且在某些對硬件進行控制的編程中,位運算是必不可少的。因此筆者參考了相關書籍,總結了一些規律和助記口訣,希望對讀者有所幫助。
一 優先級(高—〉低)
! ~ 算術運算符 關系運算符 & ^ | && || 賦值
二 移位運算 << >;>;
要點 1 它們都是雙目運算符,兩個運算分量都是整形,結果也是整形。
2 左移:右邊空出的位上補0,左邊的位將從字頭擠掉,其值相當于乘2。
3 右移:右邊的位被擠掉。對于左邊移出的空位,如果是正數則空位補0,若為負數,可能補0或補1,這取決于所用的計算機系統。
移入0的叫邏輯右移,移入1的叫算術右移,Turbo C采用邏輯右移。
三 位運算符的應用 (源操作數s 掩碼mask)
(1) 按位與—— &
1 清零特定位 (mask中特定位置0,其它位為1,s=s&mask)
2 取某數中指定位 (mask中特定位置1,其它位為0,s=s&mask)
(2) 按位或—— |
常用來將源操作數某些位置1,其它位不變。 (mask中特定位置1,其它位為0 s=s|mask)
(3) 位異或—— ^
1 使特定位的值取反 (mask中特定位置1,其它位為0 s=s^mask)
2 不引入第三變量,交換兩個變量的值 (設 a=a1,b=b1)
目 標 操 作 操作后狀態
a=a1^b1 a=a^b a=a1^b1,b=b1
b=a1^b1^b1 b=a^b a=a1^b1,b=a1
a=b1^a1^a1 a=a^b a=b1,b=a1
四 位運算應用口訣
清零取反要用與,某位置一可用或
若要取反和交換,輕輕松松用異或
五 應用舉例
(1) 判斷int型變量a是奇數還是偶數
|- 0 偶數
a&1=|
|- 1 奇數
(2) 取int型變量a的第k位 (k=0,1,2……sizeof(int))
a>;>;k&1
(3) 將int型變量a的第k位清0
a=a&~(1<<k)
(4) 將int型變量a的第k位置1
a=a|(1<<k)
(5) int型變量循環左移k次
a=a<<k|a>;>;16-k (設sizeof(int)=16)
(6) int型變量a循環右移k次
a=a>;>;k|a<<16-k (設sizeof(int)=16)
六 例題
1 實現一個函數itob(),使用移位運算將從鍵盤上輸入的整數轉換為它的二進制表示形。
解: char * itob(int n,char *ps)
{
int i;
static int size=8*sizeof(int);
for(i=size-1;i>;=0;i--,n>;>;=1)
ps[i]=(1&n)+'0';
ps[size]='\0';
return ps;
}
2 編寫一個函數 invert_end(),反轉一個值中最后n位,并將結果返回。
解: int invert_end(int num,int bits)
{
int mask=0;
int bitval=1;
while(bits-- >;0)
{
mask|=bitval;
bitval<<=1;
}
return num^mask;
}
七 實戰練習
1 編寫一個將二進制字符串轉化為數值的函數
若有 char *bin="01001001";
那么可將bin作為參數傳給該函數,使函數返回值為25。
2 編寫一個函數,該函數接受一個int參數,并返回該參數中打開的位的數量。
3 編寫一個函數,該函數接受兩個參數:一個值和一個位置。如果制定的位上的值是1,函數返回1,否則返回0。
八 總結
(1) 在了解了各種位運算的操作原理后,最好熟記各運算符的優先級。在閱讀別人寫的代碼是你可以去查書,但自己寫程序時還是
熟能生巧。
(2) 如你所見,在不引入第三變量的情況下使用異或運算就可以將兩個變量的交換,本文給除了操作過程,你應當仔細分析一下。
感覺就像變魔術一般神奇
(3) 判斷一個整數a的奇偶性通常的做法是看 a%2的結果是0還是1,這沒什么不對,但是要知道%運算要比相應的位運算慢的多啦,
對十個數進行奇偶判斷就無所謂啦,哪種方法都ok,但是若要對T數量級的數進行操作,你就不得不考慮一下效率問題了!
本文主要參考了 《C Primer Plus (第四版)》,本文的例題也來自這本書。
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
一区二区国产精品
|
欧美视频在线播放
|
色视频网站在线观看
|
三区在线
|
日韩精品在线网站
|
欧美一区二区在线播放
|
国产成人综合一区二区三区
|
久久逼逼
|
av高清毛片
|
国产在线成人
|
av中文在线播放
|
日本一区二区高清视频
|
www成年人视频
|
欧美一区精品
|
操操操操操
|
国产成人精品一区二三区在线观看
|
亚洲成av人片在线观看
|
国产电影一区二区在线观看
|
天天天操天天天干
|
久久免费福利
|
欧美一区二区三区在线观看视频
|
婷婷成人在线
|
久久久久久91
|
日日天天
|
99精品99
|
亚洲永久免费观看
|
国产精品久久久久无码av
|
在线色网
|
日韩欧美国产综合
|
国产999精品久久久久久
|
欧美一区二区三区视频
|
国产精品久久久久久亚洲调教
|
日韩成人免费
|
一区二区三区在线播放
|
自拍偷拍第1页
|
懂色av色香蕉一区二区蜜桃
|
亚洲区一区二
|
在线观看国产精品视频
|
亚洲精品电影在线观看
|
久久精品国产一区二区电影
|
久久国产一区
|