在C语言中,“?”。“:”是什么意思?
\u5728C\u8bed\u8a00\u4e2d<<\u662f\u4ec0\u4e48\u610f\u601d?\u5148\u8bf4\u5de6\u79fb,\u5de6\u79fb\u5c31\u662f\u628a\u4e00\u4e2a\u6570\u7684\u6240\u6709\u4f4d\u90fd\u5411\u5de6\u79fb\u52a8\u82e5\u5e72\u4f4d,\u5728C\u4e2d\u7528<<\u8fd0\u7b97\u7b26.\u4f8b\u5982:
int i = 1;
i = i << 2; //\u628ai\u91cc\u7684\u503c\u5de6\u79fb2\u4f4d
\u4e5f\u5c31\u662f\u8bf4,1\u76842\u8fdb\u5236\u662f000...0001(\u8fd9\u91cc1\u524d\u97620\u7684\u4e2a\u6570\u548cint\u7684\u4f4d\u6570\u6709\u5173,32\u4f4d\u673a\u5668,gcc\u91cc\u670931\u4e2a0),\u5de6\u79fb2\u4f4d\u4e4b\u540e\u53d8\u6210000...0100,\u4e5f\u5c31\u662f10\u8fdb\u5236\u76844,\u6240\u4ee5\u8bf4\u5de6\u79fb1\u4f4d\u76f8\u5f53\u4e8e\u4e58\u4ee52,\u90a3\u4e48\u5de6\u79fbn\u4f4d\u5c31\u662f\u4e58\u4ee52\u7684n\u6b21\u65b9\u4e86(\u6709\u7b26\u53f7\u6570\u4e0d\u5b8c\u5168\u9002\u7528,\u56e0\u4e3a\u5de6\u79fb\u6709\u53ef\u80fd\u5bfc\u81f4\u7b26\u53f7\u53d8\u5316,\u4e0b\u9762\u89e3\u91ca\u539f\u56e0)
\u9700\u8981\u6ce8\u610f\u7684\u4e00\u4e2a\u95ee\u9898\u662fint\u7c7b\u578b\u6700\u5de6\u7aef\u7684\u7b26\u53f7\u4f4d\u548c\u79fb\u4f4d\u79fb\u51fa\u53bb\u7684\u60c5\u51b5.\u6211\u4eec\u77e5\u9053,int\u662f\u6709\u7b26\u53f7\u7684\u6574\u5f62\u6570,\u6700\u5de6\u7aef\u76841\u4f4d\u662f\u7b26\u53f7\u4f4d,\u53730\u6b631\u8d1f,\u90a3\u4e48\u79fb\u4f4d\u7684\u65f6\u5019\u5c31\u4f1a\u51fa\u73b0\u6ea2\u51fa,\u4f8b\u5982:
int i = 0x40000000; //16\u8fdb\u5236\u768440000000,\u4e3a2\u8fdb\u5236\u768401000000...0000
i = i << 1;
\u90a3\u4e48,i\u5728\u5de6\u79fb1\u4f4d\u4e4b\u540e\u5c31\u4f1a\u53d8\u62100x80000000,\u4e5f\u5c31\u662f2\u8fdb\u5236\u7684100000...0000,\u7b26\u53f7\u4f4d\u88ab\u7f6e1,\u5176\u4ed6\u4f4d\u5168\u662f0,\u53d8\u6210\u4e86int\u7c7b\u578b\u6240\u80fd\u8868\u793a\u7684\u6700\u5c0f\u503c,32\u4f4d\u7684int\u8fd9\u4e2a\u503c\u662f-2147483648,\u6ea2\u51fa.\u5982\u679c\u518d\u63a5\u7740\u628ai\u5de6\u79fb1\u4f4d\u4f1a\u51fa\u73b0\u4ec0\u4e48\u60c5\u51b5\u5462?\u5728C\u8bed\u8a00\u4e2d\u91c7\u7528\u4e86\u4e22\u5f03\u6700\u9ad8\u4f4d\u7684\u5904\u7406\u65b9\u6cd5,\u4e22\u5f03\u4e861\u4e4b\u540e,i\u7684\u503c\u53d8\u6210\u4e860.
\u5de6\u79fb\u91cc\u4e00\u4e2a\u6bd4\u8f83\u7279\u6b8a\u7684\u60c5\u51b5\u662f\u5f53\u5de6\u79fb\u7684\u4f4d\u6570\u8d85\u8fc7\u8be5\u6570\u503c\u7c7b\u578b\u7684\u6700\u5927\u4f4d\u6570\u65f6,\u7f16\u8bd1\u5668\u4f1a\u7528\u5de6\u79fb\u7684\u4f4d\u6570\u53bb\u6a21\u7c7b\u578b\u7684\u6700\u5927\u4f4d\u6570,\u7136\u540e\u6309\u4f59\u6570\u8fdb\u884c\u79fb\u4f4d,\u5982:
int i = 1, j = 0x80000000; //\u8bbeint\u4e3a32\u4f4d
i = i << 33; // 33 % 32 = 1 \u5de6\u79fb1\u4f4d,i\u53d8\u62102
j = j << 33; // 33 % 32 = 1 \u5de6\u79fb1\u4f4d,j\u53d8\u62100,\u6700\u9ad8\u4f4d\u88ab\u4e22\u5f03
\u5728\u7528gcc\u7f16\u8bd1\u8fd9\u6bb5\u7a0b\u5e8f\u7684\u65f6\u5019\u7f16\u8bd1\u5668\u4f1a\u7ed9\u51fa\u4e00\u4e2awarning,\u8bf4\u5de6\u79fb\u4f4d\u6570>=\u7c7b\u578b\u957f\u5ea6.\u90a3\u4e48\u5b9e\u9645\u4e0ai,j\u79fb\u52a8\u7684\u5c31\u662f1\u4f4d,\u4e5f\u5c31\u662f33%32\u540e\u7684\u4f59\u6570.\u5728gcc\u4e0b\u662f\u8fd9\u4e2a\u89c4\u5219,\u522b\u7684\u7f16\u8bd1\u5668\u662f\u4e0d\u662f\u90fd\u4e00\u6837\u73b0\u5728\u8fd8\u4e0d\u6e05\u695a.
\u603b\u4e4b\u5de6\u79fb\u5c31\u662f: \u4e22\u5f03\u6700\u9ad8\u4f4d,0\u8865\u6700\u4f4e\u4f4d
\u518d\u8bf4\u53f3\u79fb,\u660e\u767d\u4e86\u5de6\u79fb\u7684\u9053\u7406,\u90a3\u4e48\u53f3\u79fb\u5c31\u6bd4\u8f83\u597d\u7406\u89e3\u4e86.
\u53f3\u79fb\u7684\u6982\u5ff5\u548c\u5de6\u79fb\u76f8\u53cd,\u5c31\u662f\u5f80\u53f3\u8fb9\u632a\u52a8\u82e5\u5e72\u4f4d,\u8fd0\u7b97\u7b26\u662f>>.
\u53f3\u79fb\u5bf9\u7b26\u53f7\u4f4d\u7684\u5904\u7406\u548c\u5de6\u79fb\u4e0d\u540c,\u5bf9\u4e8e\u6709\u7b26\u53f7\u6574\u6570\u6765\u8bf4,\u6bd4\u5982int\u7c7b\u578b,\u53f3\u79fb\u4f1a\u4fdd\u6301\u7b26\u53f7\u4f4d\u4e0d\u53d8,\u4f8b\u5982:
int i = 0x80000000;
i = i >> 1; //i\u7684\u503c\u4e0d\u4f1a\u53d8\u62100x40000000,\u800c\u4f1a\u53d8\u62100xc0000000
\u5c31\u662f\u8bf4,\u7b26\u53f7\u4f4d\u5411\u53f3\u79fb\u52a8\u540e,\u6b63\u6570\u7684\u8bdd\u88650,\u8d1f\u6570\u88651,\u4e5f\u5c31\u662f\u6c47\u7f16\u8bed\u8a00\u4e2d\u7684\u7b97\u672f\u53f3\u79fb.\u540c\u6837\u5f53\u79fb\u52a8\u7684\u4f4d\u6570\u8d85\u8fc7\u7c7b\u578b\u7684\u957f\u5ea6\u65f6,\u4f1a\u53d6\u4f59\u6570,\u7136\u540e\u79fb\u52a8\u4f59\u6570\u4e2a\u4f4d.
\u8d1f\u657010100110 >>5(\u5047\u8bbe\u5b57\u957f\u4e3a8\u4f4d)\uff0c\u5219\u5f97\u5230\u7684\u662f 11111101
\u603b\u4e4b,\u5728C\u4e2d,\u5de6\u79fb\u662f\u903b\u8f91/\u7b97\u672f\u5de6\u79fb(\u4e24\u8005\u5b8c\u5168\u76f8\u540c),\u53f3\u79fb\u662f\u7b97\u672f\u53f3\u79fb,\u4f1a\u4fdd\u6301\u7b26\u53f7\u4f4d\u4e0d\u53d8.\u5b9e\u9645\u5e94\u7528\u4e2d\u53ef\u4ee5\u6839\u636e\u60c5\u51b5\u7528\u5de6/\u53f3\u79fb\u505a\u5feb\u901f\u7684\u4e58/\u9664\u8fd0\u7b97,\u8fd9\u6837\u4f1a\u6bd4\u5faa\u73af\u6548\u7387\u9ad8\u5f88\u591a.
\u4f8b:C\u8bed\u8a00\u4e2d\u5de6\u79fb>\u8868\u793a\u9664\u4ee52\uff0c\u8fd9\u662f\u7531\u8ba1\u7b97\u673a\u5de5\u4f5c\u539f\u7406\u5bfc\u81f4\u7684\uff01\u4f46\u662f\u8981\u662f7\uff0c\u4e8c\u8fdb\u5236\u6570\u4e3a0111\uff0c\u53f3\u79fb\u4e00\u4f4d\u5f973.5\uff0c\u4f46\u662f\u53f3\u79fb\u4e4b\u540e\u4e8c\u8fdb\u5236\u6570\u53d8\u62100011\uff0c\u662f3\u3002\u4e0d\u4e00\u6837\u554a\uff0c\u600e\u6a21\u89e3\u91ca\u5462\uff1f\uff1f
\u7b54\uff1a\u79fb\u4f4d\u64cd\u4f5c\u7b26\u7684\u4e24\u4e2a\u64cd\u4f5c\u6570\u5fc5\u987b\u662f\u6574\u578b\u7684\u3002\u6574\u4e2a\u79fb\u4f4d\u8868\u8fbe\u5f0f\u7684\u503c\u7684\u7c7b\u578b\u4e5f\u662f\u6574\u578b\u7684\uff0c\u800c\u4e14\uff0c\u5de6\u79fb\u4f4d\u64cd\u4f5c\u7b26\u4e0e\u53f3\u79fb\u4f4d\u64cd\u4f5c\u7b26\u7684\u8fd0\u7b97\u5e76\u4e0d\u5bf9\u79f0\u30020111\u53f3\u79fb\u4e00\u4f4d\u662f\u628a\u6700\u540e\u4e00\u4f4d\u76841\u53bb\u6389\uff0c\u5de6\u8fb9\u8865\u4e2a0\uff0c\u5f970011\uff0c\u8f6c\u6362\u4e3a\u5341\u8fdb\u5236\u662f3\uff0c\u8fd9\u662f\u6b63\u786e\u7684\u3002\u5e76\u4e0d\u7b49\u540c\u4e8e\u9664\u4ee52 \u3002
1、意思:是条件运算符,条件运算符是C语言中唯一的三目运算符,就是说他有三个运算对象。
2、条件运算符的形式是“?:”由他构成的表达式称为条件表达式。形式为:表达式1?表达式2:表达式3。
运算符
表达式为:表达式1?表达式2:表达式3
先求解表达式1
若其值为真(非0)则将表达式2的值作为整个表达式的取值,
否则(表达式1的值为0)将表达式3的值作为整个表达式的取值。
例如:max=(a>b)?a:b
就是将a和b二者中较大的一个赋给max。
以上内容参考:百度百科-条件运算符
?在语言中表示疑问,那么疑问来自于判断。
:在语言中表示判断的结果选择。
所以编程逻辑就是先进行判断,然后再进行选择。
例如,当a>b时,x=1否则x=0,可以写成x=a>b?1:0。
扩展资料:
C语言运算符号:
比较特别的是,比特右移(>>)运算符可以是算术(左端补最高有效位)或是逻辑(左端补 0)位移。例如,将 11100011 右移 3 比特,算术右移后成为 11111100,逻辑右移则为 00011100。
因算术比特右移较适于处理带负号整数,所以几乎所有的编译器都是算术比特右移。
运算符的优先级从高到低大致是:单目运算符、算术运算符、关系运算符、逻辑运算符、条件运算符、赋值运算符(=)和逗号运算符。
关系运算符号 :== 、!=
这两个符号可以连成一个三目运算符,可以用于比较两个数的大小。如(a>b)?a:b表示若a比b大,则选a,否则选b
这是C语言的条件表达式
比如
max=(a>b)?a:b
相当于
if(a>b)max=a;
else max=b;
如c=a>b?a:b;
表示如果a>b成立,则c=a;
如果a>b不成立,则c=b;
绛旓細1銆佹剰鎬濓細鏄潯浠惰繍绠楃锛屾潯浠惰繍绠楃鏄疌璇█涓敮涓鐨勪笁鐩繍绠楃锛屽氨鏄浠栨湁涓変釜杩愮畻瀵硅薄銆2銆佹潯浠惰繍绠楃鐨勫舰寮忔槸鈥滐紵锛氣濈敱浠栨瀯鎴愮殑琛ㄨ揪寮忕О涓烘潯浠惰〃杈惧紡銆傚舰寮忎负锛氳〃杈惧紡1锛熻〃杈惧紡2锛氳〃杈惧紡3銆傝繍绠楃 琛ㄨ揪寮忎负锛氳〃杈惧紡1锛熻〃杈惧紡2锛氳〃杈惧紡3 鍏堟眰瑙h〃杈惧紡1 鑻ュ叾鍊间负鐪燂紙闈0锛夊垯灏嗚〃杈惧紡2鐨勫间綔涓烘暣涓...
绛旓細C璇█閲岄潰?銆侊細鏄笁鏈ㄨ繍绠楃锛屽叾涓紵鐢ㄦ潵鍒ゆ柇鏉′欢鐨勭湡鍋囷紝锛氱敤鏉ユ牴鎹垽鏂粨鏋滃喅瀹氬彇鍊笺傚(a<b)?a:b"鏄竴涓"鏉′欢琛ㄨ揪寮"锛屽鏋渁
绛旓細鍦–璇█涓紝? : 鏄潯浠惰繍绠楃銆傚畠鐢ㄤ簬灏嗕竴涓〃杈惧紡涓庡彟涓涓〃杈惧紡姣旇緝锛屽苟杩斿洖鍏朵腑涓涓〃杈惧紡鐨勫笺傚叾璇硶褰㈠紡濡備笅锛歝ondition ? value_if_true : value_if_false 鍦ㄨ繖涓〃杈惧紡涓紝condition鏄竴涓竷灏旇〃杈惧紡锛屽畠浼氳璇勪及涓簍rue鎴杅alse銆傚鏋滄槸true锛屽垯杩斿洖value_if_true锛涘鏋滄槸false锛屽垯杩斿洖value_if...
绛旓細鏄潯浠惰繍绠楃銆傛潯浠惰繍绠楃鏄疌璇█涓敮涓鐨勪笁鐩繍绠楃锛屽氨鏄浠栨湁涓変釜杩愮畻瀵硅薄銆傛潯浠惰繍绠楃鐨勫舰寮忔槸鈥滐紵锛氣濈敱浠栨瀯鎴愮殑琛ㄨ揪寮忕О涓烘潯浠惰〃杈惧紡銆傚舰寮忎负锛氳〃杈惧紡1锛熻〃杈惧紡2锛氳〃杈惧紡3杩愮畻鍔熻兘鏄傚厛璁$畻琛ㄨ揪寮1鐨勫硷紝鑻ュ间负闈0锛屽垯璁$畻琛ㄨ揪寮2鐨勫硷紝骞跺皢琛ㄨ揪寮2鐨勫间綔涓烘暣涓潯浠惰〃杈惧紡鐨勭粨鏋滐紱鑻ヨ〃杈惧紡1鐨...
绛旓細鈥?鈥濆湪C璇█涓〃绀虹枒闂銆傗滐細鈥濆湪C璇█涓〃绀哄垽鏂殑缁撴灉閫夋嫨銆傘愪緥瀛愩(a>b)?瑙i噴锛氬垽鏂〃杈惧紡鏄惁鑳藉閫氳繃锛屽鏋滆兘閫氳繃锛岄偅涔堣鏄庢墠鑳借繘琛屼箣鍚庣殑鎿嶄綔锛屽鏋滀笉鑳介氳繃锛屽氨閫夋嫨鍚庝竴绉嶇粨鏋溿(a>b)?y:n 瑙i噴锛氬鏋淎澶т簬B锛岄偅涔堥夋嫨Y鐨勭粨鏋滐紝濡傛灉A灏忎簬B锛岄偅涔堥夋嫨N鐨勭粨鏋溿
绛旓細鏄潯浠惰繍绠楃銆傛潯浠惰繍绠楃鏄疌璇█涓敮涓鐨勪笁鐩繍绠楃锛屽氨鏄浠栨湁涓変釜杩愮畻瀵硅薄銆傛潯浠惰繍绠楃鐨勫舰寮忔槸鈥滐紵锛氣濈敱浠栨瀯鎴愮殑琛ㄨ揪寮忕О涓烘潯浠惰〃杈惧紡銆傚舰寮忎负锛氳〃杈惧紡1锛熻〃杈惧紡2锛氳〃杈惧紡3 杩愮畻鍔熻兘鏄傚厛璁$畻琛ㄨ揪寮1鐨勫硷紝鑻ュ间负闈0锛屽垯璁$畻琛ㄨ揪寮2鐨勫硷紝骞跺皢琛ㄨ揪寮2鐨勫间綔涓烘暣涓潯浠惰〃杈惧紡鐨勭粨鏋滐紱鑻ヨ〃杈惧紡1...
绛旓細鍦ㄧ紪绋嬮鍩涓紝C璇█鐨勮繍鐢ㄩ潪甯镐箣澶氾紝瀹冨吋椤句簡楂樼骇璇█鍜屾眹缂栬瑷鐨勪紭鐐癸紝鐩歌緝浜庡叾瀹冪紪绋嬭瑷鍏锋湁杈冨ぇ浼樺娍銆傝绠楁満绯荤粺璁捐浠ュ強搴旂敤绋嬪簭缂栧啓鏄疌璇█搴旂敤鐨勪袱澶ч鍩熴傚彂灞曞巻鍙 C璇█璇炵敓浜庣編鍥界殑璐濆皵瀹為獙瀹わ紝鐢变腹灏兼柉路閲屽锛圖ennis MacAlistair Ritchie锛変互鑲锋堡鏅.锛圞enneth Lane Thompson锛夎璁$殑B璇█涓...
绛旓細?:鏄潯浠惰繍绠楃锛涙槸涓夊厓杩愮畻绗︼紝涔熸槸C璇█涓敮涓鐨勪竴涓笁鍏冭繍绠楃锛涗妇渚嬶細max=(a>b)? a:b;瀹冩槸杩欐牱鎵ц鐨勶細濡傛灉锛坅>b锛夋潯浠朵负鐪燂紝鍒欐潯浠惰〃杈惧紡鍙栧糰, 鍚﹀垯鍙朾;绛変环浜庯細if(a>b) max=a;else max=b;娉ㄦ剰锛1:鏉′欢杩愮畻绗︿紭鍏堜簬璧嬪艰繍绠楃锛屾墍浠ヨ鍏堢畻?:鍐嶇畻=锛涙剰鎬濆氨鏄厛姹傝В鏉′欢琛ㄨ揪寮忥紝...
绛旓細娉ㄦ剰锛氬湪C璇█涓紝缁撴灉1 鍜 缁撴灉2鐨勭被鍨嬪繀椤讳竴鑷淬俛 ? b : c绠鍗曠悊瑙f柟寮忎负:if(a) { return b;} else { return c;} 渚嬪锛歩nt a = 2;int c = 3;int b = (a > c) ? a : c;cout << "b:" << b << endl;杩欐牱杈撳嚭鐨勭粨鏋滄槸锛歜:3 int a = 1, b = 2, z, c = ...
绛旓細C璇█鏄涓闂ㄩ氱敤璁$畻鏈虹紪绋嬭瑷锛屽簲鐢ㄥ箍娉涖侰璇█鐨勮璁$洰鏍囨槸鎻愪緵涓绉嶈兘浠ョ畝鏄撶殑鏂瑰紡缂栬瘧銆佸鐞嗕綆绾у瓨鍌ㄥ櫒銆佷骇鐢熷皯閲忕殑鏈哄櫒鐮佷互鍙婁笉闇瑕佷换浣曡繍琛岀幆澧冩敮鎸佷究鑳借繍琛岀殑缂栫▼璇█銆傚敖绠璇█鎻愪緵浜嗚澶氫綆绾у鐞嗙殑鍔熻兘锛屼絾浠嶇劧淇濇寔鐫鑹ソ璺ㄥ钩鍙扮殑鐗规э紝浠ヤ竴涓爣鍑嗚鏍煎啓鍑虹殑C璇█绋嬪簭鍙湪璁稿鐢佃剳骞冲彴涓婅繘琛岀紪璇戯紝...