當前位置:首頁 » 編程語言 » c語言怎麼移位

c語言怎麼移位

發布時間: 2025-06-14 18:58:28

⑴ 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璇璦鐨勭Щ浣嶆搷浣滅︿嬌鐢ㄦ柟娉

銆銆縐諱綅鏃訛紝縐誨嚭鐨勪綅鏁板叏閮ㄤ涪寮冿紝縐誨嚭鐨勭┖浣嶈ˉ鍏ョ殑鏁頒笌宸︾Щ榪樻槸鍙崇Щ鑺辨帴鏈ㄦ湁鍏熾傚傛灉鏄宸︾Щ錛屽垯瑙勫畾琛ュ叆鐨勬暟鍏ㄩ儴鏄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語言中怎樣表示移位啊例如將某個值左移兩位

利用位操作:"<<"就是左移 ">>"就是右移

舉個例子:將a左移2位,然後賦給a
a<<=2 也即是a=a<<2

在C語言中左移1位,相當於乘2,右移相當於除2。

⑷ 單片機 移位操作 右移 C語言

aa=_crol_(aa,1); //左移一位
aa=_cror_(aa,1); //右移一位

可以打開:intrins.h,查看。

⑸ C語言位運算符:與、或、異或、取反、左移和右移!

在C語言的世界裡,位操作符猶如二進制運算的瑞士軍刀,它們包括按位與(&)、按位或(|)、按位異或(^)、取反(~)、左移(<>),在處理二進制數據時展現出了強大的威力。</


按位與(&):</ 這個運算符如同一個精密的清零工具,通過與操作可以清零低位元組或保留特定位。例如,60與17的按位與運算結果為00110000與00001111,得出00111111,這在數據處理中極具實用價值。


按位或(|):</ 它代表邏輯「或」操作,當二進制位中有一個為1時,結果為1。例如,60與17按位或運算後得到00110000或00001111,等於00111111,用於設置標志或組合多個位。


按位異或(^):</ 這個操作符用於實現數據的交換,無需臨時變數。如a=3和b=4,通過a=a^b; b=b^a; a=a^b; 的序列操作,a最終變為4,b變為3,展示了異或的奇妙之處。


取反(~):</ 一元運算,它是整數二進制的反碼操作,如~77的計算結果為01000000,這對於理解負數在計算機中的表示有著重要意義。


左移(<<):</ 通過左移位操作,我們可以將數值的位向左移動指定的位數,如15左移兩位變為00111100,這在數據壓縮和倍增操作中非常常見。


右移(>>):</ 無符號數右移時,高位自動補0;而對於有符號數,右移可能會影響到符號位(算術或邏輯移位)。例如,無符號數右移會導致溢出為0,這是理解數據類型特性的關鍵點。


移位的微妙差別:</ 左移時,根據移位方式(邏輯或算術)的區別,可能會產生不同的結果。例如,a = 113755 (二進制) 右移1,Turbo C系統得到045766,而其他系統可能得到145766,這體現了不同環境下的行為差異。


位運算的賦值妙用:</ 如a &= b等價於a = a & b,a <<= 2等同於a = a << 2,這些操作簡化了代碼,提高了效率。


深入探索:</ 擁有10年開發經驗的老程序員分享,精心整理的C/C++學習資源與路線圖,無論是初學者還是進階者,都能從中找到適合自己的學習路徑,加速成為編程高手的進程。

熱點內容
車秘為什麼會顯示密碼格式錯誤 發布:2025-06-15 08:14:39 瀏覽:480
android實現倒計時 發布:2025-06-15 08:08:11 瀏覽:579
資料庫是面對 發布:2025-06-15 08:02:23 瀏覽:749
電腦配置功能如何查 發布:2025-06-15 07:55:09 瀏覽:502
php獲取當前時間的時間戳 發布:2025-06-15 07:54:13 瀏覽:804
電視台伺服器ip地址怎麼看 發布:2025-06-15 07:44:54 瀏覽:348
c語言怎麼考 發布:2025-06-15 07:28:17 瀏覽:482
電信iptv主認證伺服器是什麼 發布:2025-06-15 07:20:17 瀏覽:501
前端java 發布:2025-06-15 07:09:16 瀏覽:396
foxmail文件夾刪除 發布:2025-06-15 06:54:25 瀏覽:618