C语言问题,按位与、按位或、按位异或、按位取反,解释下。 c语言中的位运算符中“按位取反”是怎么运算的

C\u8bed\u8a00\u7684\u6309\u4f4d\u4e0e\u3001\u6216\u3001\u975e\u3001\u5f02\u6216\u90fd\u4ec0\u4e48\u610f\u601d\u3002\u6709\u4ec0\u4e48\u7528

\u8fd9\u4e9b\u662f\u4f4d\u64cd\u4f5c\u8fd0\u7b97\u7b26:\u53c2\u4e0e\u8fd0\u7b97\u7684\u91cf\uff0c\u6309\u4e8c\u8fdb\u5236\u4f4d\u8fdb\u884c\u8fd0\u7b97\u3002
\u5728\u8ba1\u7b97\u673a\u4e2d\uff0c\u6570\u636e\u90fd\u662f\u4ee5\u4e8c\u8fdb\u5236\u6570\u5f62\u5f0f\u5b58\u653e\u7684\uff0c\u4f4d\u8fd0\u7b97\u5c31\u662f\u6307\u5bf9\u5b58\u50a8\u5355\u5143\u4e2d\u4e8c\u8fdb\u5236\u4f4d\u7684\u8fd0\u7b97\u3002C\u8bed\u8a00\u63d0\u4f9b6\u79cd\u4f4d\u8fd0\u7b97\u7b26\u3002
\u5305\u62ec\u4f4d\u4e0e(&)\u3001\u4f4d\u6216(|)\u3001\u4f4d\u975e(~)\u3001\u4f4d\u5f02\u6216(^)\u3001\u5de6\u79fb(>)\u516d\u79cd\u3002
\u4f4d\u8fd0\u7b97\u7b26 & |~> \u2227 \u6309\u4f18\u5148\u7ea7\u4ece\u9ad8\u5230\u4f4e\u6392\u5217\u7684\u987a\u5e8f\u662f\uff1a
\u4f4d\u8fd0\u7b97\u7b26\u4e2d\u6c42\u53cd\u8fd0\u7b97\u201c~\u201c\u4f18\u5148\u7ea7\u6700\u9ad8\uff0c\u800c\u5de6\u79fb\u548c\u53f3\u79fb\u76f8\u540c\uff0c\u5c45\u4e8e\u7b2c\u4e8c\uff0c\u63a5\u4e0b\u6765\u7684\u987a\u5e8f\u662f\u6309\u4f4d\u4e0e \u201c&\u201c\u3001\u6309\u4f4d\u5f02\u6216 \u201c\u2227\u201c\u548c\u6309\u4f4d\u6216 \u201c|\u201c\u3002\u987a\u5e8f\u4e3a~ > & \u2227 | \u3002

\u6269\u5c55\u8d44\u6599\uff1a
\u4f8b\uff1a\u8bbe\u4e8c\u8fdb\u5236\u6570a\u662f00101101 \uff0c\u82e5\u901a\u8fc7\u5f02\u6216\u8fd0\u7b97a\u2227b \u4f7fa\u7684\u9ad84\u4f4d\u53d6\u53cd\uff0c\u4f4e4\u4f4d\u4e0d\u53d8\uff0c\u5219\u4e8c\u8fdb\u5236\u6570b\u662f\u3002
\u89e3\u6790\uff1a\u5f02\u6216\u8fd0\u7b97\u5e38\u7528\u6765\u4f7f\u7279\u5b9a\u4f4d\u7ffb\u8f6c\uff0c\u53ea\u8981\u4f7f\u9700\u7ffb\u8f6c\u7684\u4f4d\u4e0e1\u8fdb\u884c\u5f02\u6216\u64cd\u4f5c\u5c31\u53ef\u4ee5\u4e86\uff0c\u56e0\u4e3a\u539f\u6570\u4e2d\u503c\u4e3a1\u7684\u4f4d\u4e0e1\u8fdb\u884c\u5f02\u6216\u8fd0\u7b97\u5f970 \uff0c\u539f\u6570\u4e2d\u503c\u4e3a0\u7684\u4f4d\u4e0e1\u8fdb\u884c\u5f02\u6216\u8fd0\u7b97\u7ed3\u679c\u5f971\u3002\u800c\u4e0e0\u8fdb\u884c\u5f02\u6216\u7684\u4f4d\u5c06\u4fdd\u6301\u539f\u503c\u3002\u5f02\u6216\u8fd0\u7b97\u8fd8\u53ef\u7528\u6765\u4ea4\u6362\u4e24\u4e2a\u503c\uff0c\u4e0d\u7528\u4e34\u65f6\u53d8\u91cf\u3002
\u5982 int a=3 , b=4\uff1b\uff0c\u60f3\u5c06a\u4e0eb\u7684\u503c\u4e92\u6362\uff0c\u53ef\u7528\u5982\u4e0b\u8bed\u53e5\u5b9e\u73b0\uff1aa=a\u2227b;
b=b\u2227a;
a=a\u2227b;
\u6240\u4ee5\u672c\u9898\u7684\u7b54\u6848\u4e3a\uff1a 11110000 \u3002
\u53c2\u8003\u8d44\u6599\u6765\u6e90\uff1a\u767e\u5ea6\u767e\u79d1-C\u8bed\u8a00

\u6309\u4f4d\u53d6\u53cd\uff0c\u987e\u540d\u601d\u4e49\uff0c\u5c31\u662f\u628a\u6bcf\u4e00\u4f4d\u53d6\u53cd\uff0c0\u53d8\u62101\uff0c1\u53d8\u62100

先说一下布尔值的与、或、异或、反运算:
与运算,两者都为真计算结果为真,反之为假:
1 & 1 = 1,1 & 0 = 0,0 & 1 = 0,0 & 0 = 0;
或运算,至少其一都为真计算结果为真,反之为假:
1 | 1 = 1,1 | 0 = 1,0 | 1 = 1,0 | 0 = 0;
异或运算,两者不同为真,反之为假:
1 ^ 1 = 0,1 ^ 0 = 1,0 ^ 1 = 1,0 ^ 0 = 0;
取反运算,单目运算符:
~1 = 0,~0 = 1;
以上例子 1 代表真,0 代表假。

按位运算就是将二进制位的每一位进行如上计算。
如 2 | 5,转换为二进制(以 1 字节 8 位为例):
00000010 | 00000101,每个二进制位分别进行或运算后得:
00000111 即 7。虽然 7 = 5 + 2 但不代表 2 | 5 = 2 + 5。
如:2 | 6 = 6,5 | 6 = 7,2 | 4 | 5 | 6 | 7 = 7。
同理,按位与运算 2 & 5 的结果为 0:
00000010 & 00000101 = 00000000
按位与运算 2 & 6 的结果为 2(二进制 00000010):
00000010 & 00000110 = 00000010。
同样也能算出 2 ^ 6 的结果为 4(二进制 00000101):
00000010 ^ 00000110 = 00000100。
取反运算 ~00000110 = 11111001。
当然,对一个数字进行取反运算结果是多少,还与该类型是有符号还是无符号,占用的字节大小等有关。上面的例子只是以一个字节为例进行说明。

1 | 1 = 0吧

  • C璇█闂,鎸変綅涓銆鎸変綅鎴銆佹寜浣嶅紓鎴栥佹寜浣嶅彇鍙,瑙i噴涓嬨
    绛旓細寮傛垨杩愮畻锛屼袱鑰呬笉鍚屼负鐪燂紝鍙嶄箣涓哄亣锛1 ^ 1 = 0锛1 ^ 0 = 1锛0 ^ 1 = 1锛0 ^ 0 = 0锛涘彇鍙嶈繍绠楋紝鍗曠洰杩愮畻绗︼細~1 = 0锛寏0 = 1锛涗互涓婁緥瀛 1 浠h〃鐪燂紝0 浠h〃鍋囥鎸変綅杩愮畻灏辨槸灏嗕簩杩涘埗浣嶇殑姣忎竴浣嶈繘琛屽涓婅绠椼傚 2 | 5锛岃浆鎹负浜岃繘鍒讹紙浠 1 瀛楄妭 8 浣嶄负渚嬶級锛00000010 |...
  • c璇█涓,鎸変綅涓銆鎸変綅鎴銆佸乏绉汇佸彸绉绘湁鍖哄埆涔?
    绛旓細锛堝彇鍙嶃佸乏绉汇佹寜浣嶄笌銆佹寜浣嶅紓鎴栥鎸変綅鎴锛変紭鍏堢骇鐢遍珮鍒颁綆鐨勯『搴忔帓鍒椾负鍙栧弽 > 宸︾Щ > 鎸変綅涓 > 鎸変綅寮傛垨 > 鎸変綅鎴栥1銆侊綖锛氭剰鎬濇槸鎸変綅鍙栧弽锛岀被浼间簬闈烇紙锛侊級鐨勫叧绯伙紝鍙栧畠鐨勫弽闈2銆<<: 鎰忔濇槸宸︾Щ锛岀Щ鍔ㄤ簩杩涘埗鐨勪綅銆3銆& : 鎰忔濇槸鎸変綅涓庯紝绫讳技浜庝笌(&&)鐨勫叧绯伙紝涓鍋囦负鍋囥4銆...
  • c璇█鈭&鍒嗗埆琛ㄧず浠涔堟牱鐨勮繍绠,楹荤儲鍛婅瘔涓,璋㈣阿
    绛旓細鎸変綅寮傛垨锛堟妸涓や釜鏁拌浆鎹㈡垚浜岃繘鍒讹紝鎸変綅寮傛垨銆傚嵆瀵瑰簲浣嶇浉鍚屽垯涓0锛岀浉寮傚垯涓1锛鎸変綅鎴锛堟妸涓や釜鏁拌浆鎹㈡垚浜岃繘鍒讹紝鎸変綅鐩告垨銆傚嵆瀵瑰簲浣嶆湁1鍒欎负1锛屽叏0鎵嶆槸0锛鎸変綅涓锛堟妸涓や釜鏁拌浆鎹㈡垚浜岃繘鍒讹紝鎸変綅寮傛垨銆傚嵆瀵瑰簲浣嶆湁0鍒欎负0锛屽叏1鍒欎负1锛
  • c璇█涓寜浣嶄笌鎸変綅鎴鏄粈涔堟剰鎬
    绛旓細鎸変綅鎴杩愮畻绗︹滐綔鈥濇槸鍙岀洰杩愮畻绗︺傚叾鍔熻兘鏄弬涓庤繍绠楃殑涓ゆ暟鍚勫搴旂殑浜岃繘浣嶇浉鎴栥傚彧瑕佸搴旂殑浜屼釜浜岃繘浣嶆湁涓涓负1鏃讹紝缁撴灉浣嶅氨涓1銆傚綋鍙備笌杩愮畻鐨勬槸璐熸暟鏃讹紝鍙備笌涓や釜鏁板潎浠ヨˉ鐮佸嚭鐜般傛暣鏁板湪璁$畻鏈轰腑鐢ㄤ簩杩涘埗鐨勪綅鏉ヨ〃绀锛孋璇█鎻愪緵涓浜涜繍绠楃鍙互鐩存帴鎿嶄綔鏁存暟涓殑浣嶏紝绉颁负浣嶈繍绠楋紝杩欎簺杩愮畻绗︾殑鎿嶄綔鏁伴兘蹇...
  • 姹傚姪!浠涔堟槸鎸変綅鎴,浠涔堟槸鎸変綅寮傛垨,浠涔堟槸鎸変綅涓?
    绛旓細1銆鎸変綅鎴锛氬鏋滀袱涓浉搴旂殑浜岃繘鍒朵綅鏈変竴涓负1锛屽垯璇ョ粨鏋滀负1锛屽惁鍒欎负0銆2銆佹寜浣嶅紓鎴(^)锛氬鏋滀袱涓浉搴旂殑浜岃繘鍒朵綅鍊间笉鍚屽垯涓1锛屽惁鍒欎负0銆3銆鎸変綅涓(&)锛氬鏋滀袱涓浉搴旂殑浜岃繘鍒朵綅閮戒负1锛屽垯璇ヤ綅鐨勭粨鏋滃间负1锛屽惁鍒欎负0銆傛寜浣嶇殑鍚勭杩愮畻锛岀粨鍚堝浘褰㈢湅璧锋潵鏄笉鏄繕鎸虹畝鍗曪紝涓嶈繃杩欎簺閮芥槸姝f暟鐨勬搷浣...
  • c璇█ 鎸変綅涓 鎸変綅鎴
    绛旓細鍦C璇█涓紝浣嶆搷浣绗︽槸澶勭悊浜岃繘鍒舵暟鎹殑閲嶈宸ュ叿銆傛寜浣嶄笌(&)銆佹寜浣嶆垨(|)鍜屾寜浣嶅紓鎴(^)鏄叾涓殑涓変釜鍩烘湰鎿嶄綔锛屽畠浠垎鍒搴斾簬浜岃繘鍒朵腑鐨凙ND銆丱R鍜孹OR閫昏緫杩愮畻銆傝鎴戜滑閫氳繃瀹炰緥鏉ョ洿瑙傜悊瑙e畠浠殑宸ヤ綔鍘熺悊銆傞鍏锛屾寜浣嶄笌(&)鎿嶄綔绗︾敤浜庡皢涓や釜浜岃繘鍒舵暟鐨勫搴斾綅杩涜姣旇緝锛屽鏋滀袱涓綅閮戒负1锛屽垯缁撴灉浣嶄负...
  • C璇█浣杩愮畻绗:涓庛佹垨銆佸紓鎴栥佸彇鍙嶃佸乏绉诲拰鍙崇Щ!
    绛旓細C璇█鐨勪笘鐣岄噷锛岄殣钘忕潃涓缁勭绉樼殑浠g爜绗﹀拻鈥斺斾綅杩愮畻绗︼紝瀹冧滑鍒嗗埆鏄細&锛鎸変綅涓锛夈亅锛鎸変綅鎴锛夈乛锛堟寜浣嶅紓鎴栵級銆亊锛堝彇鍙嶏級銆<>锛堝彸绉伙級銆傝繖浜涜繍绠楃锛屽鍚岄瓟娉曡埇锛岃鏁村瀷鏁版嵁锛坈har, short, int, long锛夊湪浜岃繘鍒剁殑鑸炲彴涓婅穬鍔紝灞曠ず鐫瀹冧滑鐙壒鐨勯瓟鍔涖傞鍏堬紝鎴戜滑鏉ョ湅鐪&锛堟寜浣嶄笌锛夛細瀹冨氨鍍忎竴...
  • C璇█鐨鎸変綅涓銆佹垨銆侀潪銆佸紓鎴栭兘浠涔堟剰鎬濄傛湁浠涔堢敤
    绛旓細鍦ㄨ绠楁満涓紝鏁版嵁閮芥槸浠ヤ簩杩涘埗鏁板舰寮忓瓨鏀剧殑锛屼綅杩愮畻灏辨槸鎸囧瀛樺偍鍗曞厓涓簩杩涘埗浣嶇殑杩愮畻銆C璇█鎻愪緵6绉嶄綅杩愮畻绗︺鍖呮嫭浣嶄笌(&)銆浣嶆垨(|)銆佷綅闈(~)銆佷綅寮傛垨(^)銆佸乏绉(<<)銆佸彸绉(>>)鍏銆浣嶈繍绠楃 & |~<< >> 鈭 鎸変紭鍏堢骇浠庨珮鍒颁綆鎺掑垪鐨勯『搴忔槸锛浣嶈繍绠...
  • C璇█鐨鎸変綅涓銆佹垨銆侀潪銆佸紓鎴栭兘浠涔堟剰鎬濄傛湁浠涔堢敤
    绛旓細鍦ㄨ绠楁満涓紝鏁版嵁閮芥槸浠ヤ簩杩涘埗鏁板舰寮忓瓨鏀剧殑锛屼綅杩愮畻灏辨槸鎸囧瀛樺偍鍗曞厓涓簩杩涘埗浣嶇殑杩愮畻銆C璇█鎻愪緵6绉嶄綅杩愮畻绗︺鍖呮嫭浣嶄笌(&)銆浣嶆垨(|)銆佷綅闈(~)銆佷綅寮傛垨(^)銆佸乏绉(<<)銆佸彸绉(>>)鍏銆浣嶈繍绠楃 & |~<< >> 鈭 鎸変紭鍏堢骇浠庨珮鍒颁綆鎺掑垪鐨勯『搴忔槸锛浣嶈繍绠...
  • C璇█涓寜浣嶆垨,涓,闈炴槸鎬庝箞鐢ㄧ殑,鎬庝箞杩愮畻?
    绛旓細C璇█涓寜浣嶆垨锛屼笌锛闈炴槸鎬庝箞鐢ㄧ殑锛屾庝箞杩愮畻锛 鎸変綅鎴栬鍒欙細1锝1=1 1锝0=1 0锝1=1 0锝0=0 鎸変綅涓瑙勫垯锛1&1=1 1&0=0 0&1=0 0&0=0 闈炶繍绠楄鍒欙細~1=0 ~0=1 瀵规瘡涓涓簩杩涗綅鍒朵綅杩涜鐩稿簲鐨勮繍绠椼c璇█涓>>=杩愮畻瀛愭槸鎬庝箞鐢ㄧ殑锛熻兘涓句緥鏈濂 棣栧厛锛">>"鏄竴涓繍绠楀瓙锛屽彨...
  • 扩展阅读:扫一扫题目出答案 ... c语言简单问题及答案 ... c#面试题 ... c#一般用来开发什么 ... ∧是什么运算符号 ... c c++ c# ... c++中<< ... c#是什么 ... c语言的一些基本问题 ...

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