C语言中的位移有什么用 C语言 int型数据 向右移位的作用是什么?

C\u8bed\u8a00\u4e2d\uff0c\u79fb\u4f4d\u8868\u793a\u4ec0\u4e48\uff1f\u6709\u4ec0\u4e48\u7528\uff1f

\u6bd4\u8f83\u6d45\u663e\u7684\u6765\u8bf4\uff0c\u5de6\u79fbn\u4f4d\u5c31\u662f\u4e58\u4ee52\u7684n\u6b21\u65b9\uff0c\u53f3\u79fbn\u4f4d\u5c31\u662f\u9664\u4ee52\u7684n\u6b21\u65b9\u3002\u5177\u4f53\u7ec6\u8282\u5982\u4e0b\uff1a

C\u8bed\u8a00\u91cc\u7684\u5de6\u79fb\u548c\u53f3\u79fb\u8fd0\u7b97
2006-09-30 13:52

\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\u6210 000...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.

\u53f3\u79fb\u4e8c\u4f4d\uff0c\u5c31\u662f\u6c42\u4e00\u4e2a\u6570\u7684 \u5f00\u56db\u6b21\u65b9\u540e \u4e0d\u80fd\u5b8c\u5168\u5f00\u65b9\u7684\u4f59\uff0c\u7528\u8fd9\u4e2a\u4f59\u6570\u7ee7\u7eed\u53bb\u5f00\u65b9\uff01\uff01\u4f60\u53ef\u4ee5\u770b\u4e0b\u600e\u4e48\u81ea\u5df1\u624b\u52a8\u5f00\u5e73\u65b9\u6570\uff0c\u4e00\u6837\u7684\u9053\u7406\uff01\uff01\u8fd9\u662f\u6570\u5b66\u95ee\u9898\uff01\uff01\u4e00\u822c\u9ad8\u4e2d\u5965\u6570\u624d\u4f1a\u6559\u5f00\u65b9\uff01\uff01

一般情况下很少用到的,使用位移可以干很多事,而且效率很高,比如一个数乘2的n次方,或者除2的n次方,只要位移n位就可以了

位运算符C语言提供了六种位运算符:

& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左移
>> 右移
给你一个例子:
左移运算 左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数, 高位丢弃,低位补0。 其值相当于乘2。例如: a<<4 指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。

右移运算 右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。其值相当于除2。

和数据结构和汇编有点联系,用得不是很多,我感觉很好理解啊。
和地址操作有点联系,还有数据的表示。

  • C璇█浣嶇Щ(宸︾Щ鍙绉绘湁鏃犵鍙)涔嬪悗鍙互杩斿洖鍘熷间箞?
    绛旓細宸绉鍙崇Щ骞朵笉浼氭敼鍙樺師鍊,渚嬪 int a = 1;a<<2;printf("%d", a); //杈撳嚭杩樻槸1 濡傛灉浣犻棶鐨勬槸 int a=1;a=a<<2;a=a>>2;閭d箞鏈缁坅鐨勫艰繕鏄1 浣嗘槸濡傛灉婧㈠嚭浜嗗氨绉讳笉鍥炴潵浜
  • C璇█涓 绉讳綅 鍜 鎸変綅 鍜 +-*/ 鐨勪紭鍏堥『搴忔槸鎬庝箞鏍风殑
    绛旓細鍦C璇█涓,澶氫釜琛ㄧず寮忓彲浠ョ敤閫楀彿鍒嗗紑,鍏朵腑鐢ㄩ楀彿鍒嗗紑鐨勮〃绀哄紡鐨勫煎垎鍒粨绠,浣嗘暣涓〃绀哄紡鐨勫兼槸鏈鍚庝竴涓〃绀哄紡鐨勫笺 鍋囪b=2,c=7,d=5, a1=(++b,c--,d+3); a2=++b,c--,d+3; 瀵逛簬绗竴琛岀▼寮忕爜,鏈変笁涓〃绀哄紡,鐢ㄩ楀彿鍒嗗紑,鎵浠ユ渶缁堢殑鍊煎簲璇ユ槸鏈鍚庝竴涓〃绀哄紡鐨勫,涔熷氨鏄痙+3,涓8,鎵浠=8銆傚...
  • C璇█涓殑>>鏄浠涔鎰忔
    绛旓細>> 琛ㄧず鍙崇Щ杩愮畻绗 鐢ㄦ硶锛氭妸涓涓暟鎹㈡垚浜岃繘鍒舵暟鍚戝彸绉诲姩鑻ュ共浣嶏紒渚嬪锛氬綋a=017 //鍏繘鍒 a=00001111 浜岃繘鍒 a=a>>2 灏辨槸鎶婁簩杩涘埗鍚戝彸绉诲姩2浣,a=000011 鍚岀悊鏈<< 鐢ㄦ硶鐩歌瘑 甯屾湜鍙互甯姪浣狅紒锛
  • c璇█涓殑>>鍜<<鍒嗗埆鏄浠涔鎰忔濆晩?
    绛旓細C璇█涓殑>>鍜<<鍒嗗埆鏄乏绉昏繍绠楃鍜屽彸绉昏繍绠楃锛岀敤浜庢暣鏁板湪浜岃繘鍒跺舰寮忕殑绉讳綅杩愮畻銆1銆佸乏绉昏繍绠楃锛<<锛夎鍒欙細鎸変簩杩涘埗褰㈠紡鎶婃墍鏈夌殑鏁板瓧鍚戝乏绉诲姩瀵瑰簲鐨勪綅鏁帮紝楂樹綅绉诲嚭(鑸嶅純)锛屼綆浣嶇殑绌轰綅琛ラ浂銆傝娉曟牸寮忥細闇瑕佺Щ浣嶇殑鏁板瓧 << 绉讳綅鐨勬鏁帮紝渚嬪锛 3 << 2锛屽垯鏄皢鏁板瓧3宸︾Щ2浣嶃傛暟瀛︽剰涔夛細鍦ㄦ暟瀛...
  • #C璇█闂#鎬庢牱鍒╃敤浣嶇Щ鎿嶄綔灏嗕竴涓暣鏁板悇浣嶆暟瀛楅嗙疆,渚嬪杈撳叆鈥15927...
    绛旓細include<stdio.h> int main(){ int i,a[10]={1,5,9,2,7};for(i=4;i>=0;i--)printf("%d",a[i]);}
  • 鍗曠墖鏈 鎬庝箞鐢浣嶇Щ鐨勬柟娉曞疄鐜颁箻闄ゆ硶
    绛旓細鐩存帴绉讳綅鍙兘璁$畻涔樻暟(鎴栭櫎鏁)涓2鐨刵娆℃柟鐨勪箻(闄)杩愮畻,瀵逛簬涓鑸殑涔橀櫎娉,杩樿閰嶅悎鍔(鍑)娉曡繍绠,姣斿a?9=a??3+a 瀹為檯涓婁簩杩涘埗鏁扮殑鍩烘湰杩愮畻鍗冲姞,鍙栧弽,绉讳綅绛,閫氳繃鍙樻崲鏉ヨ绠楀噺,涔,闄ゃ傚彲浠ラ獙璇,鐢ㄥ崟鐗囨満C璇█缂栫▼璁$畻涔樻暟涓2鐨刵娆℃柟鐨勪箻娉曡繍绠楁瘮涔樻暟涓轰竴鑸暟鐨勪箻娉曡繍绠楄蹇緱澶,灏辨槸鍥犱负鍓嶈呭彧...
  • 鍏充簬C璇█浣嶇Щ鐨勪竴涓棶棰
    绛旓細putchar(value&displayMask ? '1':'0');杩欓噷鍙湁1涓&琛ㄧず鎸変綅杩涜涓庤繍绠,姣斿value=10110 displaymask=10000 value&displayMask=10000 涓虹湡杈撳嚭瀛楃"1";鐒跺悗宸︾Щ1浣峷alue=01101 value&displayMask=00000 涓哄亣杈撳嚭瀛楃"0";缁х画杩欎箞涓嬪幓,杈撳嚭鐨勫氨鏄10110 浣犲彲浠ヨ嚜宸辫瘯涓嬪幓,杩欎釜鏄竴绉嶇畻娉.鍥犱负display...
  • c璇█浣嶈繍绠楀乏浣嶇Щ闂銆
    绛旓細涓嶅鍚э紝宸︾Щ搴旇鏄暣浣撳悜宸﹁竟绉诲姩锛屽y=x<<2,灏辨槸x鐨勫乏杈瑰幓鎺2浣嶏紝鍚庤竟琛2涓0锛岀粨鏋滃簲璇ユ槸锛01001100
  • C璇█涓>>鍜<<濡備綍浣跨敤?
    绛旓細鏍煎紡锛氶渶瑕佺Щ浣嶇殑鏁板瓧 << 绉讳綅鐨勬鏁 渚嬪锛3<<2 3杞崲涓轰簩杩涘埗鏄0011锛屾墍鏈夋暟瀛楀乏绉2涓綅缃紝绌轰綅琛0锛屽緱鍒1100锛屽嵆鍗佽繘鍒舵暟12銆2銆佸彸绉昏繍绠楃锛>>锛夛細鎸変簩杩涘埗鎶婃墍鏈夌殑鏁板瓧鍚戝彸绉诲姩瀵瑰簲浣嶇Щ浣嶆暟锛屼綆浣嶇Щ鍑(鑸嶅純)锛岄珮浣嶇殑绌轰綅琛ョ鍙蜂綅锛堟鏁拌ˉ闆讹紝璐熸暟琛1锛夈傛牸寮忥細闇瑕佺Щ浣嶇殑鏁板瓧 >> 绉讳綅鐨...
  • 鍏充簬C璇█涓殑宸浣嶇Щ鍜屽彸浣嶇Щ,鍏跺彸鍊艰兘涓鸿礋鏁板悧,鎴戝湪GNU缂栬瘧涓嬬紪璇戞椂...
    绛旓細璐熸暟鏄彲浠ョ敤%杩愮畻鐨勩備篃灏辨槸褰撲綘n=-36鐨勬椂鍊欏拰n=-4鏄竴鏍风殑銆傝嚦浜庝綘鍙崇Щ鐢ㄨ礋鏁颁釜鍗曚綅銆傘傝繖涓垜鍦╒C涓婃祴璇曠粨鏋滄亽涓0銆傘備及璁℃槸gcc榛樿璐熸暟灏辨垚浜嗗彸绉诲惂銆傚垰鎵嶆悳浜嗕竴涓嬶紝鏈夌鍙峰彸绉昏矊浼煎湪鏍囧噯涓湭瀹氫箟銆傘傛墍浠cc涓及璁″氨鏄洿鎺ユ妸鍙崇Щ璐熸暟浣嶏紙鐩稿綋浜庡乏绉伙級绉诲嚭鐨勬暟琛ュ埌浜嗗彸杈广傜劧鍚巃鐨勮瘽*p...
  • 扩展阅读:c++和java哪个好就业 ... 在c语言中左移怎么用 ... c语言位移符号怎么用 ... c语言计算速度与位移 ... c语言位移运算符 ... 学c#有前途吗 ... c语言移位怎么处理 ... c#入门基础知识 ... c语言编写计算速度和位移 ...

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