c语言位运算

c\u8bed\u8a00\u4f4d\u8fd0\u7b97

\u4e00\u3001\u4f4d\u8fd0\u7b97\u7b26C\u8bed\u8a00\u63d0\u4f9b\u4e86\u516d\u79cd\u4f4d\u8fd0\u7b97\u7b26\uff1a
& \u6309\u4f4d\u4e0e
| \u6309\u4f4d\u6216
^ \u6309\u4f4d\u5f02\u6216
~ \u53d6\u53cd
<< \u5de6\u79fb
>> \u53f3\u79fb

1. \u6309\u4f4d\u4e0e\u8fd0\u7b97 \u6309\u4f4d\u4e0e\u8fd0\u7b97\u7b26"&"\u662f\u53cc\u76ee\u8fd0\u7b97\u7b26\u3002\u5176\u529f\u80fd\u662f\u53c2\u4e0e\u8fd0\u7b97\u7684\u4e24\u6570\u5404\u5bf9\u5e94\u7684\u4e8c\u8fdb\u4f4d\u76f8\u4e0e\u3002\u53ea\u6709\u5bf9\u5e94\u7684\u4e24\u4e2a\u4e8c\u8fdb\u4f4d\u5747\u4e3a1\u65f6\uff0c\u7ed3\u679c\u4f4d\u624d\u4e3a1 \uff0c\u5426\u5219\u4e3a0\u3002\u53c2\u4e0e\u8fd0\u7b97\u7684\u6570\u4ee5\u8865\u7801\u65b9\u5f0f\u51fa\u73b0\u3002
\u4f8b\u5982\uff1a9&5\u53ef\u5199\u7b97\u5f0f\u5982\u4e0b\uff1a 00001001 (9\u7684\u4e8c\u8fdb\u5236\u8865\u7801)&00000101 (5\u7684\u4e8c\u8fdb\u5236\u8865\u7801) 00000001 (1\u7684\u4e8c\u8fdb\u5236\u8865\u7801)\u53ef\u89c19&5=1\u3002

\u6309\u4f4d\u4e0e\u8fd0\u7b97\u901a\u5e38\u7528\u6765\u5bf9\u67d0\u4e9b\u4f4d\u6e050\u6216\u4fdd\u7559\u67d0\u4e9b\u4f4d\u3002\u4f8b\u5982\u628aa \u7684\u9ad8\u516b\u4f4d\u6e05 0 \uff0c \u4fdd\u7559\u4f4e\u516b\u4f4d\uff0c \u53ef\u4f5c a&255 \u8fd0\u7b97 ( 255 \u7684\u4e8c\u8fdb\u5236\u6570\u4e3a0000000011111111)\u3002
main(){
int a=9,b=5,c;
c=a&b;
printf("a=%d\nb=%d\nc=%d\n",a,b,c);
}

2. \u6309\u4f4d\u6216\u8fd0\u7b97 \u6309\u4f4d\u6216\u8fd0\u7b97\u7b26\u201c|\u201d\u662f\u53cc\u76ee\u8fd0\u7b97\u7b26\u3002\u5176\u529f\u80fd\u662f\u53c2\u4e0e\u8fd0\u7b97\u7684\u4e24\u6570\u5404\u5bf9\u5e94\u7684\u4e8c\u8fdb\u4f4d\u76f8\u6216\u3002\u53ea\u8981\u5bf9\u5e94\u7684\u4e8c\u4e2a\u4e8c\u8fdb\u4f4d\u6709\u4e00\u4e2a\u4e3a1\u65f6\uff0c\u7ed3\u679c\u4f4d\u5c31\u4e3a1\u3002\u53c2\u4e0e\u8fd0\u7b97\u7684\u4e24\u4e2a\u6570\u5747\u4ee5\u8865\u7801\u51fa\u73b0\u3002
\u4f8b\u5982\uff1a9|5\u53ef\u5199\u7b97\u5f0f\u5982\u4e0b\uff1a 00001001|00000101
00001101 (\u5341\u8fdb\u5236\u4e3a13)\u53ef\u89c19|5=13
main(){
int a=9,b=5,c;
c=a|b;
printf("a=%d\nb=%d\nc=%d\n",a,b,c);
}

3. \u6309\u4f4d\u5f02\u6216\u8fd0\u7b97 \u6309\u4f4d\u5f02\u6216\u8fd0\u7b97\u7b26\u201c^\u201d\u662f\u53cc\u76ee\u8fd0\u7b97\u7b26\u3002\u5176\u529f\u80fd\u662f\u53c2\u4e0e\u8fd0\u7b97\u7684\u4e24\u6570\u5404\u5bf9\u5e94\u7684\u4e8c\u8fdb\u4f4d\u76f8\u5f02\u6216\uff0c\u5f53\u4e24\u5bf9\u5e94\u7684\u4e8c\u8fdb\u4f4d\u76f8\u5f02\u65f6\uff0c\u7ed3\u679c\u4e3a1\u3002\u53c2\u4e0e\u8fd0\u7b97\u6570\u4ecd\u4ee5\u8865\u7801\u51fa\u73b0\uff0c\u4f8b\u59829^5\u53ef\u5199\u6210\u7b97\u5f0f\u5982\u4e0b\uff1a 00001001^00000101 00001100 (\u5341\u8fdb\u5236\u4e3a12)
main(){
int a=9;
a=a^15;
printf("a=%d\n",a);
}

4. \u6c42\u53cd\u8fd0\u7b97 \u6c42\u53cd\u8fd0\u7b97\u7b26\uff5e\u4e3a\u5355\u76ee\u8fd0\u7b97\u7b26\uff0c\u5177\u6709\u53f3\u7ed3\u5408\u6027\u3002 \u5176\u529f\u80fd\u662f\u5bf9\u53c2\u4e0e\u8fd0\u7b97\u7684\u6570\u7684\u5404\u4e8c\u8fdb\u4f4d\u6309\u4f4d\u6c42\u53cd\u3002\u4f8b\u5982\uff5e9\u7684\u8fd0\u7b97\u4e3a\uff1a ~(0000000000001001)\u7ed3\u679c\u4e3a\uff1a1111111111110110

5. \u5de6\u79fb\u8fd0\u7b97 \u5de6\u79fb\u8fd0\u7b97\u7b26\u201c<<\u201d\u662f\u53cc\u76ee\u8fd0\u7b97\u7b26\u3002\u5176\u529f\u80fd\u628a\u201c<< \u201d\u5de6\u8fb9\u7684\u8fd0\u7b97\u6570\u7684\u5404\u4e8c\u8fdb\u4f4d\u5168\u90e8\u5de6\u79fb\u82e5\u5e72\u4f4d\uff0c\u7531\u201c<<\u201d\u53f3\u8fb9\u7684\u6570\u6307\u5b9a\u79fb\u52a8\u7684\u4f4d\u6570\uff0c
\u9ad8\u4f4d\u4e22\u5f03\uff0c\u4f4e\u4f4d\u88650\u3002\u4f8b\u5982\uff1a a>\u201d\u662f\u53cc\u76ee\u8fd0\u7b97\u7b26\u3002\u5176\u529f\u80fd\u662f\u628a\u201c>> \u201d\u5de6\u8fb9\u7684\u8fd0\u7b97\u6570\u7684\u5404\u4e8c\u8fdb\u4f4d\u5168\u90e8\u53f3\u79fb\u82e5\u5e72\u4f4d\uff0c\u201c>>\u201d\u53f3\u8fb9\u7684\u6570\u6307\u5b9a\u79fb\u52a8\u7684\u4f4d\u6570\u3002
\u4f8b\u5982\uff1a\u8bbe a=15\uff0ca>>2 \u8868\u793a\u628a000001111\u53f3\u79fb\u4e3a00000011(\u5341\u8fdb\u52363)\u3002 \u5e94\u8be5\u8bf4\u660e\u7684\u662f\uff0c\u5bf9\u4e8e\u6709\u7b26\u53f7\u6570\uff0c\u5728\u53f3\u79fb\u65f6\uff0c\u7b26\u53f7\u4f4d\u5c06\u968f\u540c\u79fb\u52a8\u3002\u5f53\u4e3a\u6b63\u6570\u65f6\uff0c \u6700\u9ad8\u4f4d\u88650\uff0c\u800c\u4e3a\u8d1f\u6570\u65f6\uff0c\u7b26\u53f7\u4f4d\u4e3a1\uff0c\u6700\u9ad8\u4f4d\u662f\u88650\u6216\u662f\u88651 \u53d6\u51b3\u4e8e\u7f16\u8bd1\u7cfb\u7edf\u7684\u89c4\u5b9a\u3002Turbo C\u548c\u5f88\u591a\u7cfb\u7edf\u89c4\u5b9a\u4e3a\u88651\u3002
main(){
unsigned a,b;
printf("input a number: ");
scanf("%d",&a);
b=a>>5;
b=b&15;
printf("a=%d\tb=%d\n",a,b);
}
\u8bf7\u518d\u770b\u4e00\u4f8b!
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\nb=%d\nc=%d\nd=%d\n",a,b,c,d);
}

float\u5411int\u578b\u5f3a\u5236\u7c7b\u578b\u8f6c\u6362\u7684\u539f\u5219\uff0c\u662f\u591a\u4f59\u7684\u5b57\u8282\u4e22\u5f03\uff0c
\u6240\u4ee5\uff1a
(int)((int)(x)+y)
=(int)((int)7.5+4.8)
=(int)(7+4.8)
=(int)11.8
=11

(int)(int(x)-y) //\u8fd9\u4e2a\u539f\u5148\u5199\u9519\u4e86\uff0c\u6700\u524d\u9762\u5c11\u4e86\u4e00\u4e2a(int)
=(int)(int7.5-4.8)
=(int)(7-4.8)
=(int)2.2
=2

\u6240\u4ee5\u8868\u8fbe\u5f0fa+(int)((int)(x)+y)>>(int(x)-y)\u53ef\u4ee5\u8f6c\u6362\u4e3a\uff1a
a+11>>2
=4+11>>2
=15>>2

\u5bf9\u4e8e>>\u64cd\u4f5c\uff0c\u5c0615\u5148\u8f6c\u6362\u4e3a\u4e8c\u8fdb\u5236\u5f62\u5f0f\uff1a1111
\u518d\u8fdb\u884c1111>>2\u5904\u7406\uff1a
1111>>2=0011

\u518d\u5c060011\u8f6c\u6362\u4e3a\u5341\u8fdb\u5236\u6570\uff0c\u4e5f\u5c31\u662f3

首先把x和Y转换成2进制
x是112,转换为2进制为64+32+16,也就是2的6次加5次加4次,即
01110000
y是211.即128+64+16+2+1.也就是2的7次加6次加4次加1次加0次,即
11010011
x<<2也就是左移二位,即11000000
y>>1也就是右移一位,即01101001
进行|运算。也就是或,为11101001
因为首位为1,所以这是一个负数,转换为正数为,所有的数取反然后加一,也就是00010111,也就是16+4+2+1,也就是23,加上原先的负号,结果是-23

呃,我算着结果应该是-23啊~~~

首先把x和Y转换成2进制
x是112,转换为2进制为64+32+16,也就是2的6次加5次加4次,即
01110000
y是211.即128+64+16+2+1.也就是2的7次加6次加4次加1次加0次,即
11010011
x<<2也就是左移二位,即11000000
y>>1也就是右移一位,即01101001
进行|运算。也就是或,为11101001
因为首位为1,所以这是一个负数,转换为正数为,所有的数取
也就是00010110也就是22,加上原先的负号,结果是-22

  • C璇█浣嶈繍绠
    绛旓細c=a|b;printf("a=%d\nb=%d\nc=%d\n",a,b,c);} 3. 鎸変綅寮傛垨杩愮畻 鎸変綅寮傛垨杩愮畻绗︹淾鈥濇槸鍙岀洰杩愮畻绗︺傚叾鍔熻兘鏄弬涓庤繍绠楃殑涓ゆ暟鍚勫搴旂殑浜岃繘浣嶇浉寮傛垨锛屽綋涓ゅ搴旂殑浜岃繘浣嶇浉寮傛椂锛岀粨鏋滀负1銆傚弬涓庤繍绠楁暟浠嶄互琛ョ爜鍑虹幇锛屼緥濡9^5鍙啓鎴愮畻寮忓涓嬶細 00001001^00000101 00001100 (鍗佽繘鍒朵负12)main(){ ...
  • C璇█浣嶈繍绠绗:涓庛佹垨銆佸紓鎴栥佸彇鍙嶃佸乏绉诲拰鍙崇Щ!
    绛旓細C璇█鐨勪笘鐣岄噷锛岄殣钘忕潃涓缁勭绉樼殑浠g爜绗﹀拻鈥斺浣嶈繍绠绗︼紝瀹冧滑鍒嗗埆鏄細&锛堟寜浣嶄笌锛夈亅锛堟寜浣嶆垨锛夈乛锛堟寜浣嶅紓鎴栵級銆亊锛堝彇鍙嶏級銆<>锛堝彸绉伙級銆傝繖浜涜繍绠楃锛屽鍚岄瓟娉曡埇锛岃鏁村瀷鏁版嵁锛坈har, short, int, long锛夊湪浜岃繘鍒剁殑鑸炲彴涓婅穬鍔紝灞曠ず鐫瀹冧滑鐙壒鐨勯瓟鍔涖傞鍏堬紝鎴戜滑鏉ョ湅鐪&锛堟寜浣嶄笌锛夛細瀹冨氨鍍忎竴...
  • C璇█浣嶈繍绠
    绛旓細灏c涓巄杩涜鎸変綅鎴杩愮畻锛屽嵆c=c|b 绋嬪簭濡備笅锛 main() {unsigned a,b,c;int n: scanf("a=%o,n=%d",&a,&n);
  • C璇█涓浣嶈繍绠绗︾殑缁撴灉涓0杩樻槸1鍛?
    绛旓細0涓0鐨勭粨鏋滄槸0锛屾暀鏉愪腑鍑洪敊浜嗐備笌杩愮畻鐨勮繍绠楄鍒欐槸0&0=0; 0&1=0; 1&0=0; 1&1=1;鍗筹細涓や綅鍚屾椂涓衡1鈥濓紝缁撴灉鎵嶄负鈥1鈥濓紝鍚﹀垯涓0銆傛寜浣嶄笌杩愮畻 鎸変綅涓庤繍绠楃鈥&鈥濇槸鍙岀洰杩愮畻绗︺傚叾鍔熻兘鏄弬涓庤繍绠楃殑涓ゆ暟鍚勫搴旂殑浜岃繘浣嶇浉涓庛傚彧瑕佸搴旂殑浜屼釜浜岃繘浣嶉兘涓1鏃讹紝缁撴灉浣嶅氨涓1銆傚弬涓庤繍绠...
  • c璇█涓&&&&鐨勭粨鏋滄槸澶氬皯?
    绛旓細缁撴灉锛2561327494111820313銆C璇█浣嶈繍绠 鏈6绉嶏細 &锛 | , ^(浜︽垨)锛 <<(宸︾Щ)锛 >>(鍙崇Щ)銆傛敞鎰忥細鍙備笌浣嶈繍绠楃殑鍏冪礌蹇呴』鏄痠nt鍨嬫垨鑰卌har鍨嬶紝浠ヨˉ鐮佸舰寮忓嚭鐜般傛寜浣嶄笌& &杩愮畻甯稿簲鐢ㄤ簬锛氳繀閫熸竻闆躲佷繚鐣欐寚瀹氫綅銆佸垽鏂鍋舵с俛 & 1 = 1;鍒檃涓哄鏁 b & 1 = 0;鍒檃涓哄伓鏁 ...
  • C璇█浣嶈繍绠
    绛旓細C鎻愪緵浜嗗叚绉浣嶈繍绠杩愮畻绗︼紱杩欎簺杩愮畻绗﹀彲鑳藉彧鍏佽鏁村瀷鎿嶄綔鏁帮紝鍗砪har銆乻hort銆乮nt鍜宭ong锛屾棤璁簊igned鎴栬卽nsigned銆& 鎸変綅AND | 鎸変綅OR ^ 鎸変綅寮傛垨 << 宸︾Щ >> 鍙崇Щ ~姹傚弽锛堜竴鍏冭繍绠楋級鎸変綅涓庢搷浣&閫氬父鐢ㄤ簬鎺╁幓鏌愪簺浣嶏紝姣斿 n = n & 0177;浣垮緱n涓櫎浜嗕綆7浣嶇殑鍚勪綅涓0銆傛寜浣嶆垨鎿嶄綔|鐢ㄤ簬鎵撳紑...
  • 浣嶈繍绠绗︾殑杩愮畻瑙勫垯
    绛旓細&: 鍦C璇█涓湁涓ょ鎰忔濓紝涓绉嶆槸鍙栧湴鍧绗︼紝鏄崟鐩繍绠楃锛涘彟涓绉嶆槸浣嶈繍绠绗︼紝琛ㄧず鈥滄寜浣嶄笌鈥濓紝鏄弻鐩繍绠楃銆倈: 鏄綅杩愮畻绗︼紝琛ㄧず鈥滄寜浣嶆垨鈥濄傝祫鏂欐墿灞 1銆佺鍙 & 鍜 | 杩欎袱涓繍绠楃閮芥槸浜岃繘鍒剁殑鎸浣嶆搷浣绗︺&: 浜岃繘鍒垛滀笌鈥(閮戒负1鏃讹紝缁撴灉鏄1锛屽惁鍒欐槸0銆)锛屾瘮濡:1010 & 1011 = ...
  • C璇█鐨勬寜浣嶄笌銆佹垨銆侀潪銆佸紓鎴栭兘浠涔堟剰鎬濄傛湁浠涔堢敤
    绛旓細鍦ㄨ绠楁満涓紝鏁版嵁閮芥槸浠ヤ簩杩涘埗鏁板舰寮忓瓨鏀剧殑锛浣嶈繍绠灏辨槸鎸囧瀛樺偍鍗曞厓涓簩杩涘埗浣嶇殑杩愮畻銆C璇█鎻愪緵6绉嶄綅杩愮畻绗︺鍖呮嫭浣嶄笌(&)銆佷綅鎴(|)銆佷綅闈(~)銆佷綅寮傛垨(^)銆佸乏绉(<<)銆佸彸绉(>>)鍏銆浣嶈繍绠楃 & |~<< >> 鈭 鎸変紭鍏堢骇浠庨珮鍒颁綆鎺掑垪鐨勯『搴忔槸锛浣嶈繍绠...
  • c璇█涓綅涓庢槸浠涔堟剰鎬
    绛旓細鍦c璇█涓紝浣嶄笌鏄竴绉嶆寜浣嶈繍绠绗︼紝瀹冪敤鈥&鈥濊〃绀恒傚畠鐨勪綔鐢ㄦ槸灏嗕袱涓搷浣滄暟鐨勪簩杩涘埗鎸変綅瀵瑰簲姣旇緝锛屽苟鐢熸垚涓涓柊鐨勪簩杩涘埗鍊笺傚叿浣撴潵璇达紝濡傛灉涓や釜浜岃繘鍒舵暟鐨勭浉搴斾綅閮芥槸1锛屽垯鏂颁簩杩涘埗鍊肩殑鐩稿簲浣嶄篃鏄1锛屽惁鍒欎负0銆傚洜姝わ紝鍦ㄤ綅涓庤繍绠椾腑锛屽彧鏈夊綋涓や釜鎿嶄綔鏁扮殑鐩稿簲浣嶉兘鏄1鏃讹紝缁撴灉鎵嶆槸1銆備綅涓庤繍绠楀湪c...
  • c璇█,浣嶇鍚堣祴鍊杩愮畻瀛, =,&=,^=!=, 鍒嗗埆浠涔堝惈涔夊晩?
    绛旓細c璇█,浣嶇鍚堣祴鍊杩愮畻瀛, <<=,>>=,&=,^=!=, 鍒嗗埆浠涔堝惈涔夊晩? 1.= 璧嬪艰繍绠楀瓙 鍙樻暟=琛ㄧず寮 濡:a=3;灏哸鐨勫艰祴涓3 2./= 闄ゅ悗璧嬪 鍙樻暟/=琛ㄧず寮 濡:a/=3;鍗砤=a/3 3.*= 涔樺悗璧嬪 鍙樻暟*=琛ㄧず寮 濡:a*=3;鍗砤=a*3 4.%= 鍙栨ā鍚庤祴鍊 鍙樻暟%=琛ㄧず寮 濡:a%=3;鍗砤=a%3 5.+= 鍔...
  • 扩展阅读:c++编程 ... c++中<< ... c++必背入门代码 ... c++编程必背50个代码 ... c语言ll 和&&的运算 ... c语言运算符优先级表 ... c语言一个&和两个& ... c++运算符 ... c语言提供了几种运算符 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网