C#移位运算问题 C#中移位运算符主要是用来做什么?

C#\u79fb\u4f4d\u8fd0\u7b97

\u79fb\u4f4d\u8fd0\u7b97(shifting operation\uff09\u662fC#\u4e2d\u4e00\u79cd\u7279\u6b8a\u7684\u8fd0\u7b97\uff0c\u5176\u539f\u7406\u662f\u6839\u636e\u6570\u503c\u5b58\u50a8\u5728\u8ba1\u7b97\u673a\u5185\u5b58\u4e2d\u4ee5\u4e8c\u8fdb\u5236\u7684\u6807\u51c6\uff0c\u8fdb\u884c\u524d\u79fb\u6216\u8005\u540e\u79fb\u82e5\u5e72\u4f4d\u7684\u7b97\u6cd5\u3002\u6839\u636e\u9898\u76ee\u6765\u770b\uff0c\u65e0\u7b26\u53f7\u4f4d\u7684\u6570\u5b57\u79fb\u52a8\u201c\u5de6\u201d\u3001\u201c\u53f3\u201d\u6709\u4ee5\u4e0b\u89c4\u5f8b\uff1a

1\uff09\u5de6\u79fb\uff1a\u5c06\u6bcf\u4e2a\u4e8c\u8fdb\u5236\u7684\u6570\u5b57\u5f80\u5de6\u8fb9\u79fb\u52a8\u82e5\u5e72\u4f4d\uff08\u82e5\u5e72\u4f4d\uff1a\u7b26\u53f7\u201c<<\u201d\u540e\u9762\u7684\u6570\u5b57\uff0c\u4e0d\u8db3\u4ee50\u8865\u5145\uff09\u3002

2\uff09\u53f3\u79fb\uff1a\u5c06\u6bcf\u4e2a\u4e8c\u8fdb\u5236\u7684\u6570\u5b57\u5f80\u53f3\u8fb9\u79fb\u52a8\u82e5\u5e72\u4f4d\uff08\u82e5\u5e72\u4f4d\uff1a\u7b26\u53f7\u201c>>\u201d\u540e\u9762\u7684\u6570\u5b57\uff0c\u4e0d\u8db3\u4ee5\u6700\u9ad8\u4f4d\u7684\u6570\u5b57\u8865\u5145\uff09\u3002

\u4e0b\u9762\u7ed9\u51fa\u5177\u4f53\u4f8b\u5b50\uff1a

\u3010\u4f8b\u3011\u8ba1\u7b972>2\uff1a

\u5728\u8ba1\u7b97\u673a\u4e2d\uff0c\u6b63\u6574\u65702\u7684\u6e90\u7801\uff1d\u53cd\u7801\uff1d\u8865\u7801\uff1d0000 0010\uff0c\u5f80\u5de6\u8fb9\u6bcf\u4e2a\u6570\u5b57\u79fb\u52a82\u4f4d\u4e4b\u540e\uff0c\u6700\u9ad8\u7684\u4e24\u4f4d\u6ea2\u51fa\uff08\u4e22\u5f03\uff09\uff0c\u53c8\u56e0\u4e3a\u7b26\u53f7\u4f4d\uff08\u6700\u9ad8\u4f4d\u4e3a0\uff09\uff0c\u56e0\u6b64\u8865\u5145\u4e24\u4e2a0\uff0c\u53d8\u62100000 1000=>8.

\u53cd\u4e4b\uff0c0000 0010\u53f3\u79fb\u52a82\u4e3a\u53bb\u6389\u53f3\u8fb9\u7684\u4e24\u4e2a\u6570\u5b57\uff0c\u5728\u6700\u9ad8\u4f4d\u4e0a\u6dfb\u52a0\u4e24\u4e2a0\uff0c\u53d8\u62100000 0000=>0

\u3010\u91cd\u8981\u7ed3\u8bba\u3011
1\uff09\u5de6\u79fb\u548c\u53f3\u79fbn\u4f4d\uff0c\u76f8\u5f53\u4e8e\u53bb\u6389\u524d\u9762\u548c\u540e\u9762\u5bf9\u5e94\u7684\u82e5\u5e72\u4f4d\uff0c\u518d\u8865\u5145\u3002
2\uff09\u5f53\u5de6\u79fb\u52a8\u662f2\u7684\u65f6\u5019\uff0c\u53ef\u4ee5\u770b\u6210\u662f\u67d0\u4e2a\u6570\u00d72\u7684n\u6b21\u65b9\uff0c\u53cd\u4e4b\u9664\u4ee52\u7684n\u6b21\u65b9\u3002

\u5de6\u79fb\u8fd0\u7b97\u7b26 (<<) \u5c06\u7b2c\u4e00\u4e2a\u64cd\u4f5c\u6570\u5411\u5de6\u79fb\u52a8\u7b2c\u4e8c\u4e2a\u64cd\u4f5c\u6570\u6307\u5b9a\u7684\u4f4d\u6570\u3002\u7b2c\u4e8c\u4e2a\u64cd\u4f5c\u6570\u7684\u7c7b\u578b\u5fc5\u987b\u662f int\u3002
\u5c31\u662f\u7528\u6765\u6570\u503c\u8ba1\u7b97\u65b9\u4fbf, \u7279\u522b\u662f | , & ^ \u4e4b\u7c7b\u7684.

1、
c >> 16 = 0x1AF034 >> 16 = 0x00001A
0x00001A & 0x00FFFF = 0x00001A = 26

2、
c & 0x0000FF = 0x1AF034 & 0x0000FF = 0x000034 = 52

位移运算就是将数字的二进制形式按指定的位数左移或右移,因为十六进制的每位数可以化成一个四位数的二进制的数字(2的四次方为16),所以在二进制中移动16位就是在十六进制中移动16/4 = 4位,那么0x1AF034 >> 16 = 0x00001A

按位且(&)这个运算符,这个运算符的意思是将数字转为二进制逐位进行且比较,按照1且1为1,1且0为0,0且0为0的规则,这样拆开来运算后再整合为结果
其实有个快捷方法,还是因为十六进制的每位数可以化成一个四位数的二进制的数字(2的四次方为16),而且0x0 = 0000B,0xF = 1111B,也就是说如果对应位上数是F,那么这位上的数可以保留,否则变为0,如上面的0x0000FF & 0x1AF034,你可以看到前面的数字只有个位和十位上有数字,所以只保留后面数字的个位和十位就是结果,那么就是0x000034 = 52了

1、
c >> 16 = 0x1AF034 >> 16 = 0x00001A
0x00001A & 0x00FFFF = 0x00001A = 26

2、
c & 0x0000FF = 0x1AF034 & 0x0000FF = 0x000034 = 52

位移运算就是将数字的二进制形式按指定的位数左移或右移,因为十六进制的每位数可以化成一个四位数的二进制的数字(2的四次方为16),所以在二进制中移动16位就是在十六进制中移动16/4 = 4位,那么0x1AF034 >> 16 = 0x00001A

按位且(&)这个运算符,这个运算符的意思是将数字转为二进制逐位进行且比较,按照1且1为1,1且0为0,0且0为0的规则,这样拆开来运算后再整合为结果
其实有个快捷方法,还是因为十六进制的每位数可以化成一个四位数的二进制的数字(2的四次方为16),而且0x0 = 0000B,0xF = 1111B,也就是说如果对应位上数是F,那么这位上的数可以保留,否则变为0,如上面的0x0000FF & 0x1AF034,你可以看到前面的数字只有个位和十位上有数字,所以只保留后面数字的个位和十位就是结果,那么就是0x000034 = 52了




移位运算(shifting
operation)是c#中一种特殊的运算,其原理是根据数值存储在计算机内存中以二进制的标准,进行前移或者后移若干位的算法。根据题目来看,无符号位的数字移动“左”、“右”有以下规律:
1)左移:将每个二进制的数字往左边移动若干位(若干位:符号“<<”后面的数字,不足以0补充)。
2)右移:将每个二进制的数字往右边移动若干位(若干位:符号“>>”后面的数字,不足以最高位的数字补充)。
下面给出具体例子:
【例】计算2<<2和2>>2:
在计算机中,正整数2的源码=反码=补码=0000
0010,往左边每个数字移动2位之后,最高的两位溢出(丢弃),又因为符号位(最高位为0),因此补充两个0,变成0000
1000=>8.
反之,0000
0010右移动2为去掉右边的两个数字,在最高位上添加两个0,变成0000
0000=>0
【重要结论】
1)左移和右移n位,相当于去掉前面和后面对应的若干位,再补充。
2)当左移动是2的时候,可以看成是某个数×2的n次方,反之除以2的n次方。

  • C璇█鍜孋++鏈変粈涔堝尯鍒?
    绛旓細涓銆佷富浣撲笉鍚 1銆C璇█锛氭槸涓闂ㄩ潰鍚戣繃绋嬬殑銆佹娊璞″寲鐨勯氱敤绋嬪簭璁捐璇█锛屽箍娉涘簲鐢ㄤ簬搴曞眰寮鍙戙2銆丆++锛氭槸C璇█鐨勭户鎵匡紝瀹冩棦鍙互杩涜C璇█鐨勮繃绋嬪寲绋嬪簭璁捐锛屽張鍙互杩涜浠ユ娊璞℃暟鎹被鍨嬩负鐗圭偣鐨勫熀浜庡璞$殑绋嬪簭璁捐銆備簩銆佷紭鍔夸笉鍚 1銆丆璇█锛氳兘浠ョ畝鏄撶殑鏂瑰紡缂栬瘧銆佸鐞嗕綆绾у瓨鍌ㄥ櫒銆侰璇█鏄粎浜х敓灏戦噺鐨勬満鍣...
  • 鏁板绗﹀彿銆傝繖涓C鏄粈涔堢鍙?
    绛旓細鏁板绗﹀彿锛岃繖涓C寮忕粍鍚堟暟锛屽湪绾挎у啓娉曚腑琚啓浣淐(n,m)銆傜粍鍚堟暟鐨勮绠楀叕寮忎负 n 鍏冮泦鍚 A 涓笉閲嶅鍦版娊鍙 m 涓厓绱犱綔鎴愮殑涓涓粍鍚堝疄璐ㄤ笂鏄 A 鐨勪竴涓 m 鍏冨瓙闆嗗拰銆傚鏋滅粰闆 A 缂栧簭 鎴愪负涓涓簭闆嗭紝閭d箞 A 涓娊鍙 m 涓厓绱犵殑涓涓粍鍚堝搴斾簬鏁版 鍒板簭闆 A 鐨勪竴涓‘瀹氱殑涓ユ牸淇濆簭鏄犲皠銆傜粍鍚...
  • 甯︽湁C鐨勫崟璇?
    绛旓細浣犲ソ锛屽緢楂樺叴涓轰綘瑙g瓟:cabbage n.娲嬬櫧鑿滐紝鍗峰績鑿 cabin n.灏忓眿锛涜埞鑸憋紝鏈鸿埍 cabinet n.姗憋紝鏌滐紱鍐呴榿 cable n.缂嗭紝绱紱鐢电紗锛涚數鎶 cafe n.鍜栧暋棣嗭紱灏忛鍘 cafeteria n.鑷姪椋熷爞 cage n.绗硷紱楦熺锛屽洑绗 cake n.楗硷紝绯曪紝铔嬬硶 calculate vt.璁$畻锛涗及璁★紱璁″垝 calculation n.璁$畻锛岃绠楃粨鏋 calculator...
  • C-CUP浠涔堟剰鎬?
    绛旓細C鏉紝鏉僵鐨勫昂瀵镐箣銆侫鏉紝B鏉紝C鏉...鎸囩殑鏄僵鏉殑澶у皬锛屽搴旂殑鏄钩鎴垮ぇ灏忋傝1/2缃╂澂锛3/4缃╂澂锛屽叏缃╂澂绛夋寚鐨勫氨鏄僵鏉殑澶栧舰璁捐銆傜僵鏉殑澶у皬灏辨槸涓婅兏鍥村噺鍘讳笅鑳稿洿鐨勫樊锛屼竴鑸潵璇达紝鍦10cm宸﹀彸閫夋嫨A缃╂澂锛12.5cm宸﹀彸閫夋嫨B缃╂澂锛15cm宸﹀彸閫夋嫨C缃╂澂锛17.5cm宸﹀彸閫夋嫨D缃╂澂锛20cm宸﹀彸閫夋嫨E缃╂澂锛...
  • 鎺掑垪缁勫悎涓偅涓C鎬庝箞绠?
    绛旓細鎺掑垪A(n,m)=n脳锛坣-1锛.锛坣-m+1锛=n!/锛坣-m锛!(n涓轰笅鏍,m涓轰笂鏍,浠ヤ笅鍚)缁勫悎C(n,m)=P(n,m)/P(m,m) =n!/m!锛坣-m锛!锛涗緥濡侫(4,2)=4!/2!=4*3=12 C(4,2)=4!/(2!*2!)=4*3/(2*1)=6
  • 鍦c璇█涓,c++涓++c鏈変粈涔堝尯鍒
    绛旓細鍦c璇█閲++c鐨勬剰鎬濇槸灏哻鐨勫+1鍚庢彁鍙朿鐨勫硷紝c++鐨勬剰鎬濇槸鍏堟彁鍙朿鐨勫煎悗灏哻鐨勫+1銆備緥锛1銆乮nt c=0;printf("%d\n",++c);//c鐨勫煎拰杈撳嚭缁撴灉閮戒负1銆2銆乮nt i,j=0;i=j++; //姝ゆ椂锛宨=0锛屽洜涓簀++鍏堣祴鍊硷紝鍚庡姞锛屾墍浠鏈韩宸茬粡鍙樻垚1浜嗐3銆乮nt c=0;printf("%d\n",c++); //...
  • c++涓%c鏄粈涔堟剰鎬
    绛旓細c鏄牸寮忔帶鍒剁锛屾剰鎬濇槸鎸夊瓧绗﹁緭鍏ユ垨杈撳嚭锛屾瘮濡傦細char ch='a';printf("%c\n",ch);閭d箞灏变細杈撳嚭a銆俤:杈撳叆杈撳嚭涓烘暣褰,printf("%d",a);涔熷氨鏄墦鍗版暣鏁癮.s:杈撳叆杈撳嚭涓哄瓧绗︿覆 f:杈撳叆杈撳嚭涓烘诞鐐瑰瀷 printf( stream, "%s%c", s, c );s -- 鎵撳嵃鏍煎紡锛屾寜瀛楃涓叉柟寮忚緭鍑哄彉閲弒鐨勫硷紙瀛楃涓诧級鍒...
  • c²₄鏄粈涔堟剰鎬
    绛旓細C²₄ 琛ㄧず浠 n 涓墿浣撲腑鍙栧嚭 4 涓墿浣撶殑缁勫悎鏁帮紝鍙互浣跨敤缁勫悎鏁板叕寮忚繘琛岃绠椼傜粍鍚堟暟鍏紡涓猴細C(n, m) = n! / (m! * (n-m)!)鍏朵腑锛宯 涓烘绘暟锛宮 涓洪夊彇鐨勬暟鐩紝! 琛ㄧず闃朵箻杩愮畻銆傛牴鎹繖涓叕寮忥紝鍙互璁$畻 C²₄ 鐨勫笺傛楠ゅ涓嬶細灏嗗叕寮忎腑鐨 n 鍜 m 鍒嗗埆鏇挎崲...
  • 鐥呭巻鍒嗕负ABCD鍥涘瀷銆傛槸鎬庝箞鍒嗙殑?
    绛旓細B鍨嬶細鐥呯鐩稿姣旇緝鍗曠函锛屼絾姣擜鍨嬭绋嶅井澶嶆潅涓浜涖傝屼笖锛岀梾鎯呬篃鐩稿姣旇緝鎬ャ佷笖闇绱фュ鐞嗐備絾鍗充娇杩欐牱锛岀梾浜虹殑鐢熷懡浣撳緛鏄浉瀵圭ǔ瀹氱殑锛岄鍚庝篃鐩稿姣旇緝纭畾涓旇壇濂斤紝杩欑被鐥呭巻锛屼笉灞炰簬鐤戦毦鍗遍噸鐨勪綇闄㈡偅鑰咃紱C鍨嬶細杩欑被鐥呭巻鐨勭梾浜猴紝涓鑸梾鎯呮瘮杈冨鏉傘傚氨璇婃柇缁撴灉鏉ヨ锛屽彲鑳芥殏鏃跺睘浜庡苟娌″叿浣撹瘖鏂剰瑙佺殑鎯呭喌锛屼篃灏辨槸璇...
  • C²₄鐨勫间负澶氬皯?
    绛旓細C²₄ 琛ㄧず浠 n 涓墿浣撲腑鍙栧嚭 4 涓墿浣撶殑缁勫悎鏁帮紝鍙互浣跨敤缁勫悎鏁板叕寮忚繘琛岃绠椼傜粍鍚堟暟鍏紡涓猴細C(n, m) = n! / (m! * (n-m)!)鍏朵腑锛宯 涓烘绘暟锛宮 涓洪夊彇鐨勬暟鐩紝! 琛ㄧず闃朵箻杩愮畻銆傛牴鎹繖涓叕寮忥紝鍙互璁$畻 C²₄ 鐨勫笺傛楠ゅ涓嬶細灏嗗叕寮忎腑鐨 n 鍜 m 鍒嗗埆鏇挎崲...
  • 扩展阅读:扫一扫题目出答案 ... c#考试题库 ... c++面试题 ... c#笔试经典50题 ... c#基础练习题 ... c#软件开发面试题 ... c#面试常见问题 ... 数据库面试题 ... python面试题 ...

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