求解c++位运算!a=1,b=2,c=a^b<<2 则c是多少 C++已知A=1,B=2.C=3 ,则表达式++a||-b&...

char c=a^b<<2 a=1,b=2. c=?

a=1 \u5176\u4e8c\u8fdb\u5236\u7801\u4e3a 00000001
b=2 \u5176\u4e8c\u8fdb\u5236\u5417\u4e3a 00000010
^\u662f\u5f02\u6216\u8fd0\u7b97\uff08\u4e8c\u8fdb\u5236\u7801\u7684\uff09\u4e8c\u8fdb\u5236\u7801\u76f8\u540c\u4e3a0 \u4e0d\u540c\u4e3a1
<<\u662f\u4e8c\u8fdb\u5236\u7801\u7684\u5de6\u79fb\u8fd0\u7b97 \u5c31\u662f\u5c06\u4e8c\u8fdb\u5236\u7801\u76841\u5411\u5de6\u79fb\u52a8n\u4f4d

<<\u8fd0\u7b97\u7684\u4f18\u5148\u7ea7\u6bd4^\u9ad8
\u6240\u4ee5 c=a^b<<2
\u5c31\u662f\u8bf4 \u5148\u628ab\u7684\u4e8c\u8fdb\u5236\u7801\uff0800000010\uff09\u5de6\u79fb\u4e24\u4f4d 00001000
\u7136\u540e\u4e0ea\uff0800000001\uff09\u8fdb\u884c\u5f02\u6216\u8fd0\u7b97 \u5f97 00001001
\u8fd9\u4e2a\u4e8c\u8fdb\u5236\u7801\u8f6c\u6362\u4e3a10\u8fdb\u5236 \u5c31\u662f9


\u770b\u7ed3\u679c\u5c31\u77e5\u9053\u4e86 \u6267\u884c\u4e86\u7b2c\u4e00\u4e2a\u62ec\u53f7\u4e4b\u540e\u5c31\u8fd4\u56de\u4e86 \u540e\u9762\u7684\u62ec\u53f7\u6ca1\u6709\u6267\u884c
\u7b2c\u4e00\u4e2a\u62ec\u53f7\u6700\u540e\u4e00\u4e2a\u503c\u662f!c c\u903b\u8f91\u53d6\u53cd\u8fd0\u7b97 c\u662f3 \u53d6\u53cd\u540e\u662f0 \u7136\u540e\u9017\u53f7\u8868\u8fbe\u5f0f\u8fd4\u56de\u6700\u540e\u4e00\u4e2a\u503c \u8fd4\u56de\u4e860 \u524d\u9762\u7684&&\u9047\u52300\u5c31\u76f4\u63a5\u8fd4\u56de\u7ed3\u679c\u4e86

答案是9
符号^是异或的意思,也就是两个操作位,如果是不同的,则计算结果是1
符号<<是左位移的意思,按位移动
c=a^b<<2 的计算顺序是先计算b<<2,即2<<2得8
然后计算 a^8 = 1^8 = (2进制)0001^(2进制)1000 = (2进制)1001 = 9

这是位运算:
根据编译器计算结果是:9 说明它的运算顺序是从右至左运算的。
先计算b<<2 b=0010 左移两位结果是: b=1000
再计算a或b a=0001 b=1000 相或结果为 c=1001 也就是9

如果你对位运算不太理解,我把我的笔记给你吧。
下面是我在学习位运算时的笔记,你看下吧,很清楚的,看明白后就懂了。
位与字节
1,按位运算也就是对字节或字中的实际位进行检测,设置或移位。
2,C语言中的位运算符有:
运算符 功能 运算符 功能 运算符 功能
& 按位与 ~ 取反 << 左移
| 按位或 ^ 按位异或 >> 右移
3,按位与运算符(&):是双目运算符,功能是使参与运算的两数各对应的二进位相“与”,只有对应的两个二进位均为1 时,结果为1,否则为0.
如:0000000000010110
& 0000000010001101
结果为:0000000000000100
//与运算的一个作用是清零,可以设法将一个原数中为1的位置0,只要将它与全部为0的数进行与运算即可。
//与运算的另一个作用是取特定位,可以通过与的方式取一个数中的某些指定位。如上可以对结果取位数为1的位。
4,按位或运算符(|)是双目运算符,功能是使参与运算的两数中各对应的二进位相或,只要对应的两个二进数有一个为1 时,结果就为1,否则为0.
5,按位取反运算符(~)为单目运算符,具有右结合性。其功能是对参与运算的数的各二进位按位求反,即将0变为1,将 来变为0.
//在进行取反运算的过程中切不可简单地认为对一个数取反后的结果就是该数的相反数(即~25就是-25)这是错误的, 按位求反是对二进制数按位取反。
6,按位异或运算符(^)是又目运算符,其功能是使参与运算的两数各对应的二进位相异或,当对应的两个二进位数相异或 时,两数都为1时结果为0,有一个数为1时,结果为1,其它情况也为0.
//异或操作的一个主要用途就是能使特定的位翻转,另一个主要用途就是在不使用临时变量的情况下实现两个变量值的 互换。
//异或运算经常用到一些比较简单的加密算法中。
7,左移运算符(<<)是双目运算符,其功能是把"<<"运算符左边的运算数的各二进位全部左移若干位,移动的位数由"<<" 运算符右边的数指定,高位丢弃,低位补0。 如:a<<2 //代表a的二进数向左移动2位。
//实际上左移一位相当于该数乘以2,称动2位 相当于该数乘以4,以此类推。这种情况只限于移动位不含1的情况。
8,右移运算符(>>)是双目运算符,其功能是把">>"运算符左边的运算数的各二进位全部右移若干位,移动的位数按">>" 运算符右边的数指定。
//在进行右移时对于有符号的数需要注意符号问题,当为正数时,最高位补0,而为负数时,最高位补0或1取决于编译 系统的规定,移入0的称为"逻辑右移",移入1的称为"算术右移"。(visualC++)是以算术右移。
循环移位
1,循环移位就是将移出的低位放到该数的高位或者移出高位放到该数的低位。
如:a.00110000,00000000,11010000,00001011 左循环移动4位
z.10110000,00000000,00000000,00000000 先左移32-4=28位后的结果。 公式为:z=a<<(32-n) //此时n=4
y.00001100.00000000,00001101.00000000 再右移4位的结果。 y=a>>n
a.10111100.00000000,00001101.00000000 这就是循环左移4位的结果。 a=z|y
2,右循环移动的方法类似,只需要转换即可。

1^1=0 0^0=0 1^0=1 0^1=0
0001 1100
^ 1000 ^ 1001
= 1001 = 0101

  • C璇█浣嶈繍绠绗
    绛旓細寮傛垨(^): 寮傛垨杩愮畻鍒欐槸浣嶇骇鐨勭炕杞紑鍏筹紝鐩稿悓浣嶅间负0锛屼笉鍚屼綅鍊间负1锛鏄疄鐜颁綅缈昏浆鐨勫埄鍣ㄣ傝鎴戜滑閫氳繃涓涓C浠g爜绀轰緥鎰熷彈涓涓嬭繖浜浣嶆搷浣鐨勯瓟鍔涳細- 淇濇寔鍘熷肩殑寮傛垨涓0锛012^00=012- 鏃犱复鏃跺彉閲忎氦鎹㈠肩殑灏忕獚闂細a=3(2), b=4(2) 鈫 a=a&b, b=b&a, a=a&b锛岃繖鏍峰氨瀹炵幇浜嗗肩殑浜掓崲锛岃屾棤...
  • C璇█浣嶈繍绠闂
    绛旓細3銆佽礋鏁板湪鏄互琛ョ爜鐨勫舰鍔垮瓨鍌紝鎵浠浣嶈繍绠鏄鍙嶇爜杩涜鎿嶄綔锛堟湁鐨勪功璇存鏁版槸瀵规簮鐮佹搷浣滐紝浣嗘槸姝f暟婧愮爜銆佸弽鐮併佽ˉ鐮侀兘涓鏍凤紝涓轰簡鐓ч【璐熸暟锛屾垜鏄涓哄琛ョ爜鎿嶄綔鐨勶級4銆&杩愮畻锛屽彧鏈夊搴旂殑涓や釜浜岃繘浣嶅潎涓1鏃讹紝缁撴灉浣嶆墠涓1 锛鍚﹀垯涓0銆傛墍浠&b=00000100锛堣ˉ鐮侊級锛岃浆鍖栦负婧愮爜00000100锛屽崄杩涘埗c=4 5銆亅...
  • 甯垜瑙e喅涓涓C璇█鐨勯鐩 浣嶈繍绠
    绛旓細&浣嶄笌,涓よ繍绠楅噺,鑻ラ兘鏄1杩愮畻缁撴灉鏄1,鍏朵粬鎯呭喌缁撴灉涓0 |浣嶆垨,涓よ繍绠楅噺,鑻ラ兘鏄0杩愮畻缁撴灉鏄0,鍏朵粬鎯呭喌缁撴灉涓1 ^浣嶅紓鎴,涓よ繍绠楅噺,鑻ョ浉鍚,杩愮畻缁撴灉鏄0,涓嶇浉鍚,缁撴灉涓1 ~浣嶉潪,鍗曡繍绠楅噺,鍙栧弽,1涓0,0涓1 x,缁撴灉鎸夌収16杩涘埗杈撳嚭 045,杩欐牱鐨勬暟鎹,鍓嶉潰涓涓0琛ㄧず鍏舵槸鍏繘鍒舵暟鎹,鑰屼笉鏄崄杩涘埗 鐢...
  • 浣嶆搷浣绗﹀拰浣嶈繍绠
    绛旓細浣嶆搷浣绗︽槸鐢ㄦ潵瀵规暟鎹繘琛屼簩杩涘埗杩愮畻鏃剁敤鍒扮殑鎿嶄綔绗﹀彿锛屽苟涓旀槸浜岃繘鍒舵寜浣嶅搴旀搷浣溿備竴.&  涓庢搷浣滅 c = a&b锛屽彧鏈夊綋a鍜宐閮芥槸1鐨勬椂鍊欙紝c鎵嶇瓑浜1锛鍙a鍜宐鍏朵腑鏈変竴涓负0锛宑閮界瓑浜0锛屼负浠涔堟槸杩欎箞绠楃殑鍛紵璁$畻鏈烘槸閫氳繃浜岃繘鍒舵潵杩涜鏁版嵁鎿嶄綔鐨勶紝杩欑涓庢搷浣滆劚鑳庝簬涓庨棬鐢佃矾锛屽涓嬪浘 浠庝笌闂...
  • C璇█浣嶈繍绠绗:涓庛佹垨銆佸紓鎴栥佸彇鍙嶃佸乏绉诲拰鍙崇Щ!
    绛旓細绉讳綅鐨勫井濡欏樊鍒細</ 宸︾Щ鏃讹紝鏍规嵁绉讳綅鏂瑰紡锛堥昏緫鎴栫畻鏈級鐨勫尯鍒紝鍙兘浼氫骇鐢熶笉鍚岀殑缁撴灉銆備緥濡傦紝a = 113755 (浜岃繘鍒) 鍙崇Щ1锛Turbo C绯荤粺寰楀埌045766锛岃屽叾浠栫郴缁熷彲鑳藉緱鍒145766锛岃繖浣撶幇浜嗕笉鍚岀幆澧冧笅鐨勮涓哄樊寮傘浣嶈繍绠鐨勮祴鍊煎鐢細</ 濡俛 &= b绛変环浜巃 = a & b锛a <<= 2绛夊悓浜巃 = a <<...
  • C璇█浣嶈繍绠閮芥槸浠涔?
    绛旓細浣嶆搷浣滆繍绠閮藉彧鑳芥槸鏁村舰鎴栧瓧绗﹀瀷锛屽瓧绗﹀瀷瀹為檯鏄崟瀛楄妭鏁村舰銆傚寘鎷互涓嬪嚑涓搷浣滅锛氭寜浣嶄笌&锛屾寜浣嶆垨 |锛屾寜浣嶅紓鎴 ^锛屽乏绉<<锛屽彸绉>>鍙﹀杩樻湁涓涓彇浣欐搷浣滐細%a%b鐨勬剰鎬濇槸锛宎闄や互b锛鍙栦綑鏁般傝繖涓槸C璇█鐨勭‖鎬ц瀹锛屼綅鎿嶄綔閮芥槸姝f暟鎸夌収浜岃繘鍒惰繘琛岃〃杈剧殑鏃跺欐墠鏈夌殑姒傚康锛涜屽彇浣欐搷浣滄槸鏁存暟鐩搁櫎寰椾綑鏁...
  • C璇█閫昏緫鎴栦笌闈炵殑鐢ㄦ硶
    绛旓細杩愮畻鏂瑰悜锛氬湪C璇█涓紝鍙湁4涓繍绠楃瑙勫畾浜嗚繍绠楁柟鍚戯紝瀹冧滑鏄&&銆亅 |銆佹潯浠惰繍绠楃鍙婅祴鍊艰繍绠楃銆&&銆亅 |閮芥槸鍏堣绠楀乏杈硅〃杈惧紡鐨勫硷紝褰撳乏杈硅〃杈惧紡鐨勫艰兘纭畾鏁翠釜琛ㄨ揪寮忕殑鍊兼椂锛屽氨涓嶅啀璁$畻鍙宠竟琛ㄨ揪寮忕殑鍊笺傚 a = 0 && b; &&杩愮畻绗︾殑宸﹁竟浣0锛屽垯鍙宠竟琛ㄨ揪寮廱灏变笉鍐嶅垽鏂
  • c璇█涓,濡備綍瀹炵幇浣嶈繍绠?
    绛旓細c璇█锛氬彇鏁村瀷鍙橀噺x涓殑绗琾浣嶅紑濮嬬殑n涓猙it浣嶏紝鍙互閲囩敤浣嶈繍绠鐨勬柟娉曘傚厛鍚戝乏绉讳綅锛屼涪寮冨墠闈笉闇瑕佺殑浣嶏紝鍐嶉氳繃鍚戝悗绉讳綅锛屼涪寮冨悗闈笉闇瑕佺殑浣嶏紝鏈鍚庡啀鍚戝乏绉讳綅鍒板師鏉ョ殑浣嶇疆锛屽氨鍙互浜嗐1//num&(num-1)=(1111)&(1110)=(1110)2//num&(num-1)=(1110)&(1101)=(1100)3//num&(num-1)=(...
  • ...鐢ㄧ鍙封淾鈥濊〃绀恒傚浜庝换鎰涓涓綅搴忓垪a,a^a=0,C 璇█绋嬪簭鍙互?_鐧惧害...
    绛旓細XOR鏄浣嶈繍绠绗︼紝鍗*x=a 涓*y=b锛岃瀹a = 1锛b = 2锛泍=*x ^ *y; /* 绗竴姝 */ 鎵ц鍚 *x = 1锛*y=3 x=*x ^ *y; /* 绗簩姝 */ 鎵ц鍚 *x = 2锛*y=3 y=*x ^ *y; /* 绗笁姝 */鎵ц鍚 *x = 2锛*y=1 娴嬭瘯渚嬪瓙 int main(int argc,char *argv[]...
  • C璇█ 浣嶈繍绠
    绛旓細鍗虫暟鍊煎ぇ灏2鐨刵娆℃柟 >>鍙崇Щ锛岀被浼煎乏绉伙紝鏁板煎ぇ灏忛櫎浠2鐨刵娆℃柟 &鎸変綅涓锛1涓庝换鎰忔暟绛変簬浠绘剰鏁版湰韬紝0涓庝换鎰忔暟绛変簬0锛屽嵆1&x=x锛0&x=0 |鎸変綅鎴栵紝x|y涓彧瑕佹湁涓涓1鍒欑粨鏋滀负1 ^鎸変綅寮傛垨锛寈^y鐩哥瓑鍒欎负0锛屼笉绛夊垯涓1 鎵鏈夋暟鍊煎繀椤昏浆鎹负浜岃繘鍒舵暟鎵嶈兘浣嶈繍绠楋紝姣忎竴浣嶆暟鐩稿搴旇繍绠 ...
  • 扩展阅读:c++教程 ... c++运算 ... c++加减乘除运算编程 ... 求解方程计算器 ... c++输入运算符 ... c入门教程视频 ... c++数学题 ... c++位运算 ... c++&用法 ...

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