c語言怎麼左移
❶ C語言按位左移運算規則
C語言中按位左移的運算符為<<,其規則如下:
對於操作a<<n,
1 按照二進制值每位向高位(書寫上是向左)移動n位;
2 最高位(最左邊的)n位捨去;
3 最低位(最右邊)填加n個0.
簡單起見,用char型舉例如下:
例一
0x12 << 3 =>
B00010010 << 3 =>
B10010 000(這里最高位的三個0被捨去,其它依次左移,最低位補三個0) =>
0x90
即0x12 << 3 = 0x90
例二
0x9E << 2 =>
B10011110 << 2 =>
B01111000 (最高位10捨去,最低位補兩個0)=>
0x78
可以編寫如下程序驗證:
#include<stdio.h>
voidcheck(chara,intn)
{
printf("0x%hhx<<%d=0x%hhx ",a,n,a<<n);
}
intmain()
{
check(0x12,3);
check(0x9e,2);
return0;
}
其運行結果為
0x12<<3=0x90
0x9e<<2=0x78
可以看到與我們計算結果是相符的。
❷ c璇璦宸︾Щ銆佸彸縐葷殑瑙勫垯鏄浠涔
SHL錛堢畻鏁板乏縐伙級錛歴hift logical left
SHR錛堢畻鏁板彸縐伙級錛歴hift logical right
SAL錛堥昏緫宸︾Щ錛夛細shift arithmetic left
SAR錛堥昏緫鍙崇Щ錛夛細shift arithmetic right
ROL錛堝驚鐜宸︾Щ錛夛細rotate left
ROR錛堝驚鐜鍙崇Щ錛夛細rotate right
RCL錛堝甫榪涗綅鐨勫驚鐜宸︾Щ錛夛細rotate left through carry
RCR錛堝甫榪涗綅鐨勫驚鐜鍙崇Щ錛夛細rotate right through carry
❸ C語言中怎樣表示移位啊例如將某個值左移兩位
利用位操作:"<<"就是左移 ">>"就是右移
舉個例子:將a左移2位,然後賦給a
a<<=2 也即是a=a<<2
在C語言中左移1位,相當於乘2,右移相當於除2。
❹ C語言和單片機中的左移右移
# include "reg51.h" // 包含頭文件
#define uchar unsigned char
void delay02s(void) // 延時0.2s子程序
{
unsigned char i,j,k;
for ( i=2;i>0;i-- )
for (j=200;j>0;j-- )
for (k=250;k>0;k-- );
}
void main (void) // 主函數
{
uchar i,j;
while (1) // 死循環
{
j=0x01; // j初始化為0x01,左移初始值
for(i=0;i<8;i++) // for循環語句,完成8個循環
{
P1= ~ j; // 對變數j 中的值按位取反後,從P1口輸出
delay02s( ); // 延時0.2s
j= j<<1; // 左移1位
}
j=0x80; // 設置右移初始值j為0x80
for (i=0;i<8;i++)
{
P1= ~ j;
delay02s( );
j= j>>1; // 右移1位
}
}
}
❺ C璇璦鐨勭Щ浣嶆搷浣滅︿嬌鐢ㄦ柟娉
銆銆縐諱綅鏃訛紝縐誨嚭鐨勪綅鏁板叏閮ㄤ涪寮冿紝縐誨嚭鐨勭┖浣嶈ˉ鍏ョ殑鏁頒笌宸︾Щ榪樻槸鍙崇Щ鑺辨帴鏈ㄦ湁鍏熾傚傛灉鏄宸︾Щ錛屽垯瑙勫畾琛ュ叆鐨勬暟鍏ㄩ儴鏄0;濡傛灉鏄鍙崇Щ錛岃繕涓庤縐諱綅鐨勬暟鎹鏄鍚﹀甫絎﹀彿鏈夊叧銆傝嫢鏄涓嶅甫絎﹀彿鏁幫紝鍒欒ˉ鍏ョ殑鏁板叏閮ㄤ負0;鑻ユ槸甯︾﹀彿鏁幫紝鍒欒ˉ鍏ョ殑鏁板叏閮ㄧ瓑浜庡師鏁扮殑鏈宸︾浣嶄笂鐨勫師鏁(鍗沖師絎﹀彿浣)銆傚叿浣撶Щ浣嶈勫垯濡備笅鎵紺恆
銆銆浣嶇Щ浣嶈繍綆楃︾殑浼樺厛綰у備笅錛
銆銆路綆楁湳榪愮畻絎︺浼樺厛浜庛浣嶇Щ浣嶈繍綆楃 浼樺厛浜 鍏崇郴榪愮畻絎
銆銆路浣嶇Щ浣嶈繍綆楃︽槸鍚岀駭鍒鐨勶紝緇撳悎鎬ф槸鑷宸﹀悜鍙
銆銆渚嬪傦紝璁炬棤絎﹀彿鐭鏁村瀷鍙橀噺a涓0111(瀵瑰簲浜岃繘鍒舵暟涓0000000001001001),
銆銆鍒欙細a<<3 緇撴灉涓01110(瀵瑰簲浜岃繘鍒舵暟涓0000001001001000)錛宎涓嶅彉
銆銆a>>4 緇撴灉涓04銆(瀵瑰簲浜岃繘鍒舵暟涓0000000000000100)錛宎涓嶅彉
銆銆鍙堝傦紝璁劇煭鏁村瀷鍙橀噺a涓-4(瀵瑰簲浜岃繘鍒舵暟涓 1111111111111100),
銆銆鍒欙細a<<3 緇撴灉涓-32(瀵瑰簲浜岃繘鍒舵暟涓1111111111100000)錛宎涓嶅彉
銆銆a>>4 緇撴灉涓-1(瀵瑰簲浜岃繘鍒舵暟涓1111111111111111)錛宎涓嶅彉
銆銆C璇璦閲岀殑宸︾Щ鍜屽彸縐昏繍綆
銆銆2006-09-30 13:52
銆銆鍏堣村乏縐,宸︾Щ灝辨槸鎶婁竴涓鏁扮殑鎵鏈変綅閮藉悜宸︾Щ鍔ㄨ嫢騫蹭綅,鍦–涓鐢<<榪愮畻絎.渚嬪:
銆銆int i = 1;
銆銆i = i << 2; //鎶奿閲岀殑鍊煎乏縐2浣
銆銆涔熷氨鏄璇,1鐨2榪涘埗鏄000...0001(榪欓噷1鍓嶉潰0鐨勪釜鏁板拰int鐨勪綅鏁版湁鍏,32浣嶆満鍣,gcc閲屾湁31涓0),宸︾Щ2浣嶄箣鍚庡彉鎴 000... 0100,涔熷氨鏄10榪涘埗鐨4,鎵浠ヨ村乏縐1浣嶇浉褰撲簬涔樹互2,閭d箞宸︾Щn浣嶅氨鏄涔樹互2鐨刵嬈℃柟浜(鏈夌﹀彿鏁頒笉瀹屽叏閫傜敤,鍥犱負宸︾Щ鏈夊彲鑳藉艱嚧絎﹀彿鍙樺寲,涓嬮潰瑙i噴鍘熷洜)
銆銆闇瑕佹敞鎰忕殑涓涓闂棰樻槸int綾誨瀷鏈宸︾鐨勭﹀彿浣嶅拰縐諱綅縐誨嚭鍘葷殑鎯呭喌.鎴戜滑鐭ラ亾,int鏄鏈夌﹀彿鐨勬暣褰㈡暟,鏈宸︾鐨1浣嶆槸絎﹀彿浣,鍗0姝1璐,閭d箞縐諱綅鐨勬椂鍊欏氨浼氬嚭鐜版孩鍑,渚嬪:
銆銆int i = 0x40000000; //16榪涘埗鐨40000000,涓2榪涘埗鐨01000000...0000
銆銆i = i << 1;
銆銆閭d箞,i鍦ㄥ乏縐1浣嶄箣鍚庡氨浼氬彉鎴0x80000000,涔熷氨鏄2榪涘埗鐨100000...0000,絎﹀彿浣嶈緗1,鍏朵粬浣嶅叏鏄0,鍙樻垚浜唅nt綾誨瀷鎵鑳借〃紺虹殑鏈灝忓,32浣嶇殑int榪欎釜鍊兼槸-2147483648,婧㈠嚭.濡傛灉鍐嶆帴鐫鎶奿宸︾Щ1浣嶄細鍑虹幇浠涔堟儏鍐靛憿?鍦–璇璦涓閲囩敤浜嗕涪寮冩渶楂樹綅鐨勫勭悊鏂規硶,涓㈠純浜1涔嬪悗,i鐨勫煎彉鎴愪簡0.
銆銆宸︾Щ閲屼竴涓姣旇緝鐗規畩鐨勬儏鍐墊槸褰撳乏縐葷殑浣嶆暟瓚呰繃璇ユ暟鍊肩被鍨嬬殑鏈澶т綅鏁版椂,緙栬瘧鍣ㄤ細鐢ㄥ乏縐葷殑浣嶆暟鍘繪ā綾誨瀷鐨勬渶澶т綅鏁,鐒跺悗鎸変綑鏁拌繘琛岀Щ浣,濡:
銆銆int i = 1, j = 0x80000000; //璁緄nt涓32浣
銆銆i = i << 33; // 33 % 32 = 1 宸︾Щ1浣,i鍙樻垚2
銆銆j = j << 33; // 33 % 32 = 1 宸︾Щ1浣,j鍙樻垚0,鏈楂樹綅琚涓㈠純
銆銆鍦ㄧ敤gcc緙栬瘧榪欐電▼搴忕殑鏃跺欑紪璇戝櫒浼氱粰鍑轟竴涓獁arning,璇村乏縐諱綅鏁>=綾誨瀷闀垮害.閭d箞瀹為檯涓奿,j縐誨姩鐨'灝辨槸1浣,涔熷氨鏄33%32 鍚庣殑浣欐暟.鍦╣cc涓嬫槸榪欎釜瑙勫垯,鍒鐨勭紪璇戝櫒鏄涓嶆槸閮戒竴鏍風幇鍦ㄨ繕涓嶆竻妤.
銆銆鎬諱箣宸︾Щ 灝辨槸: 涓㈠純鏈楂樹綅,0琛ユ渶浣庝綅
銆銆鍐嶈村彸縐,鏄庣櫧浜嗗乏縐葷殑閬撶悊,閭d箞鍙崇Щ灝辨瘮杈冨ソ鐞嗚В浜.
銆銆鍙崇Щ鐨勬傚康鍜屽乏縐葷浉鍙,灝辨槸寰鍙寵竟鎸鍔ㄨ嫢騫蹭綅,榪愮畻絎︽槸>>.
銆銆鍙崇Щ瀵圭﹀彿浣嶇殑澶勭悊鍜屽乏縐諱笉鍚,瀵逛簬鏈夌﹀彿鏁存暟鏉ヨ,姣斿俰nt綾誨瀷,鍙崇Щ浼氫繚鎸佺﹀彿浣嶄笉鍙,渚嬪:
銆銆int i = 0x80000000;
銆銆i = i >> 1; //i鐨勫間笉浼氬彉鎴0x40000000,鑰屼細鍙樻垚0xc0000000
銆銆灝辨槸璇,絎﹀彿浣嶅悜鍙崇Щ鍔ㄥ悗,姝f暟鐨勮瘽琛0,璐熸暟琛1,涔熷氨鏄奼囩紪璇璦涓鐨勭畻鏈鍙崇Щ.鍚屾牱褰撶Щ鍔ㄧ殑浣嶆暟瓚呰繃綾誨瀷鐨勯暱搴︽椂,浼氬彇浣欐暟,鐒跺悗縐誨姩浣欐暟涓浣.
銆銆璐熸暟10100110 >>5(鍋囪懼瓧闀誇負8浣)錛屽垯寰楀埌鐨勬槸 11111101
銆銆鎬諱箣,鍦–涓,宸︾Щ鏄閫昏緫/綆楁湳宸︾Щ(涓よ呭畬鍏ㄧ浉鍚),鍙崇Щ鏄綆楁湳鍙崇Щ,浼氫繚鎸佺﹀彿浣嶄笉鍙 .瀹為檯搴旂敤涓鍙浠ユ牴鎹鎯呭喌鐢ㄥ乏/鍙崇Щ鍋氬揩閫熺殑涔 /闄よ繍綆,榪欐牱浼氭瘮寰鐜鏁堢巼楂樺緢澶.
銆銆鍦ㄥ緢澶氱郴緇熺▼搴忎腑甯歌佹眰鍦ㄤ綅(bit)涓綰ц繘琛岃繍綆楁垨澶勭悊銆侰璇璦鎻愪緵浜嗕綅榪愮畻鐨勫姛鑳斤紝 榪欎嬌寰桟璇璦涔熻兘鍍忔眹緙栬璦涓鏍風敤鏉ョ紪鍐欑郴緇熺▼搴忋
銆銆鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣
銆銆鎿嶄綔絎 浣滅敤
銆銆鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹
銆銆& 浣嶉昏緫涓
銆銆| 浣嶉昏緫鎴
銆銆^ 浣嶉昏緫寮傛垨
銆銆- 浣嶉昏緫鍙
銆銆>> 鍙崇Щ
銆銆<< 宸︾Щ
銆銆鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣鈹佲攣
銆銆鎸変綅榪愮畻鏄瀵瑰瓧鑺傛垨瀛椾腑鐨勫疄闄呬綅榪涜屾嫻嬨佽劇疆鎴栫Щ浣, 瀹冨彧閫傜敤浜庡瓧絎﹀瀷鍜屾暣鏁板瀷鍙橀噺浠ュ強瀹冧滑鐨勫彉浣, 瀵瑰叾瀹冩暟鎹綾誨瀷涓嶉傜敤銆
銆銆鎴戜滑瑕佹敞鎰忓尯鍒嗕綅榪愮畻鍜岄昏緫榪愮畻銆
銆銆1.鎸変綅涓庤繍綆
銆銆鎸変綅涓庤繍綆楃"&"鏄鍙岀洰榪愮畻絎︺傚叾鍔熻兘鏄鍙備笌榪愮畻鐨勪袱鏁板悇瀵瑰簲鐨勪簩榪涗綅鐩鎬笌銆傚彧鏈夊瑰簲鐨勪袱涓浜岃繘浣嶅潎涓1鏃訛紝緇撴灉浣嶆墠涓1 錛屽惁鍒欎負0銆傚弬涓庤繍綆楃殑鏁頒互琛ョ爜鏂瑰紡鍑虹幇銆
銆銆渚嬪傦細9&5鍙鍐欑畻寮忓備笅錛 00001001 (9鐨勪簩榪涘埗琛ョ爜)&00000101 (5鐨勪簩榪涘埗琛ョ爜)銆00000001 (1鐨勪簩榪涘埗琛ョ爜)鍙瑙9&5=1銆
銆銆鎸変綅涓庤繍綆楅氬父鐢ㄦ潵瀵規煇浜涗綅娓0鎴栦繚鐣欐煇浜涗綅銆備緥濡傛妸a 鐨勯珮鍏浣嶆竻 0 錛 淇濈暀浣庡叓浣嶏紝 鍙浣 a&255 榪愮畻 ( 255 鐨勪簩榪涘埗鏁頒負0000000011111111)銆
銆銆main(){
銆銆int a=9,b=5,c;
銆銆c=a&b;
銆銆printf("a=%d b=%d c=%d ",a,b,c);
銆銆}
銆銆2. 鎸変綅鎴栬繍綆
銆銆鎸変綅鎴栬繍綆楃︹渱鈥濇槸鍙岀洰榪愮畻絎︺傚叾鍔熻兘鏄鍙備笌榪愮畻鐨勪袱鏁板悇瀵瑰簲鐨勪簩榪涗綅鐩告垨銆傚彧瑕佸瑰簲鐨勪簩涓浜岃繘浣嶆湁涓涓涓1鏃訛紝緇撴灉浣嶅氨涓1銆傚弬涓庤繍綆楃殑涓や釜鏁板潎浠ヨˉ鐮佸嚭鐜般
銆銆渚嬪傦細9|5鍙鍐欑畻寮忓備笅錛 00001001|00000101
銆銆00001101 (鍗佽繘鍒朵負13)鍙瑙9|5=13
銆銆main(){
銆銆int a=9,b=5,c;
銆銆c=a|b;
銆銆printf("a=%d b=%d c=%d ",a,b,c);
銆銆}
銆銆3. 鎸変綅寮傛垨榪愮畻
銆銆鎸変綅寮傛垨榪愮畻絎︹淾鈥濇槸鍙岀洰榪愮畻絎︺傚叾鍔熻兘鏄鍙備笌榪愮畻鐨勪袱鏁板悇瀵瑰簲鐨勪簩榪涗綅鐩稿紓鎴栵紝褰撲袱瀵瑰簲鐨勪簩榪涗綅鐩稿紓鏃訛紝緇撴灉涓1銆傚弬涓庤繍綆楁暟浠嶄互琛ョ爜鍑虹幇錛屼緥濡 9^5鍙鍐欐垚綆楀紡濡備笅錛 00001001^00000101 00001100 (鍗佽繘鍒朵負12)
銆銆main(){
銆銆int a=9;
銆銆a=a^15;
銆銆printf("a=%d ",a);
銆銆}
銆銆4. 奼傚弽榪愮畻
銆銆奼傚弽榪愮畻絎︼綖涓哄崟鐩榪愮畻絎︼紝鍏鋒湁鍙崇粨鍚堟с 鍏跺姛鑳芥槸瀵瑰弬涓庤繍綆楃殑鏁扮殑鍚勪簩榪涗綅鎸変綅奼傚弽銆備緥濡傦綖9鐨勮繍綆椾負錛 ~(0000000000001001)緇撴灉涓猴細1111111111110110
銆銆5. 宸︾Щ榪愮畻
銆銆宸︾Щ榪愮畻絎︹<<鈥濇槸鍙岀洰榪愮畻絎︺傚叾鍔熻兘鎶娾<< 鈥濆乏杈圭殑榪愮畻鏁扮殑鍚勪簩榪涗綅鍏ㄩ儴宸︾Щ鑻ュ共浣嶏紝鐢扁<<鈥濆彸杈圭殑鏁版寚瀹氱Щ鍔ㄧ殑浣嶆暟錛岄珮浣嶄涪寮冿紝浣庝綅琛0銆備緥濡傦細 a<<4 鎸囨妸a鐨勫悇浜岃繘浣嶅悜宸︾Щ鍔4浣嶃傚俛=00000011(鍗佽繘鍒3)錛屽乏縐4浣嶅悗涓00110000(鍗佽繘鍒48)銆
銆銆6. 鍙崇Щ榪愮畻
銆銆鍙崇Щ榪愮畻絎︹>>鈥濇槸鍙岀洰榪愮畻絎︺傚叾鍔熻兘鏄鎶娾>> 鈥濆乏杈圭殑榪愮畻鏁扮殑鍚勪簩榪涗綅鍏ㄩ儴鍙崇Щ鑻ュ共浣嶏紝鈥>>鈥濆彸杈圭殑鏁版寚瀹氱Щ鍔ㄧ殑浣嶆暟銆備緥濡傦細璁 a=15錛宎>>2銆琛ㄧず鎶000001111鍙崇Щ涓00000011(鍗佽繘鍒3)銆傚簲璇ヨ存槑鐨勬槸錛屽逛簬鏈夌﹀彿鏁幫紝鍦ㄥ彸縐繪椂錛岀﹀彿浣嶅皢闅忓悓縐誨姩銆傚綋涓烘f暟鏃訛紝 鏈楂樹綅琛0錛岃屼負璐熸暟鏃訛紝絎﹀彿浣嶄負1錛屾渶楂樹綅鏄琛0鎴栨槸琛1 鍙栧喅浜庣紪璇戠郴緇熺殑瑙勫畾銆
銆銆main(){
銆銆unsigned a,b;
銆銆printf("input a number: ");
銆銆scanf("%d",&a);
銆銆b=a>>5;
銆銆b=b&15;
銆銆printf("a=%d b=%d ",a,b);
銆銆}
銆銆璇峰啀鐪嬩竴渚!
銆銆main(){
銆銆char a='a',b='b';
銆銆int p,c,d;
銆銆p=a;
銆銆p=(p<<8)|b;
銆銆d=p&0xff;
銆銆c=(p&0xff00)>>8;
銆銆printf("a=%d b=%d c=%d d=%d ",a,b,c,d);
銆銆}
銆銆褰撹繘琛屾寜浣嶄笌鎴栨椂錛屾渶濂戒嬌鐢16榪涘埗錛屽湪紼嬪簭涓榪欐牱琛ㄧず錛0x01 琛ㄧず0000 0001
銆銆鎵浠ワ紝瀛楃︾被鍨媋鐨勬渶楂樹綅寮哄埗1鍙浠ヨ繖鏍鳳細a=a|0x80銆傚叾浠栫殑鍙浠ヤ緷嬈$被鎺!
❻ C程序中,左移「<<」、右移「>>」 的具體用法是什麼
C語言中,「<<」為左移運算符,「>>」為右移運算符。
具體使用方法如下:
1、左移運算符(<<)
將一個運算對象的各二進制位全部左移若干位(左邊的二進制位丟棄,右邊補0)。
例:a = a << 2 將a的二進制位左移2位,右補0,
左移1位後a = a * 2;
若左移時舍棄的高位不包含1,則每左移一位,相當於該數乘以2。
2、右移運算符(>>)
將一個數的各二進制位全部右移若干位,正數左補0,負數左補1,右邊丟棄。
操作數每右移一位,相當於該數除以2。
例如:a = a >> 2 將a的二進制位右移2位。
左補0 or 補1 得看被移數是正還是負。