当前位置:首页 » 编程语言 » c语言怎么左移

c语言怎么左移

发布时间: 2024-05-28 01:52:54

❶ 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 得看被移数是正还是负。

热点内容
信用卡一般的原始密码是多少 发布:2024-11-27 10:28:32 浏览:991
安卓的程序结构是什么 发布:2024-11-27 10:28:29 浏览:269
住房贷款还完了如何解压 发布:2024-11-27 10:28:27 浏览:576
手动上传发票 发布:2024-11-27 10:23:26 浏览:990
我的世界宽带能开服务器吗 发布:2024-11-27 10:23:21 浏览:876
移动存储器是什么 发布:2024-11-27 10:04:08 浏览:876
linux重装linux 发布:2024-11-27 09:46:25 浏览:558
电脑玩云服务器 发布:2024-11-27 09:19:22 浏览:66
苹果什么助手能和安卓互通 发布:2024-11-27 09:18:47 浏览:58
android花屏 发布:2024-11-27 09:18:38 浏览:125