C语言中整数除以2和右移一位的问题 C语言中,与2乘左移,与2除右移,这个是啥意思,求详细解释!...

C\u8bed\u8a00\u4e2d\uff0c\u4e0e2\u4e58\u5de6\u79fb\uff0c\u4e0e2\u9664\u53f3\u79fb\uff0c\u8fd9\u4e2a\u662f\u5565\u610f\u601d\uff0c\u6c42\u8be6\u7ec6\u89e3\u91ca\uff01\uff01\uff01

\u5bf9\u4e00\u4e2a\u6570\u5b9e\u65bd\u5de6\u79fb\u64cd\u4f5c=\u5bf9\u8fd9\u4e2a\u6570\u00d72\uff1b\u5bf9\u4e00\u4e2a\u6570\u5b9e\u65bd\u53f3\u79fb\u64cd\u4f5c=\u5bf9\u8fd9\u4e2a\u6570\u00f72\u3002
a=ox32(16\u8fdb\u5236)00110010
b=a<<2
\u8fd9\u4e2a\u65f6\u5019b=11001000\u5bf9
\u90a3\u4e48\u6b64\u65f6a=00110010
\u7ee7\u7eed
c=a<<2
\u8bf7\u95eec\u662f\u5728\u539f\u6765a\u7684\u521d\u503c\uff08ox32\uff09\u4e0a\u79fb\u52a8
\u8fd9\u4e2a\u65f6\u5019c=11001000
\u4e00\u4e2a\u5341\u8fdb\u5236\u7684\u6570\uff0c\u5728\u7535\u8111\u4e2d\u90fd\u53ef\u4ee5\u6309\u4e8c\u8fdb\u5236\u8868\u793a\u3002\u4f8b\u5982\uff1a\u6570\u5b578\uff0c\u4e8c\u8fdb\u5236\u5c31\u662f1000.\u5de6\u79fb\u4e00\u4f4d\uff0c1000>1=0100=4,\u5c31\u662f8\u00f72\u3002

\u6269\u5c55\u8d44\u6599
C\u8bed\u8a00\u4e2d\u79fb\u4f4d\u4ee3\u66ff\u4e58\u9664
unsignedinthash(charconst*s)
{
unsignedh=0;
while(*s!='\0'){
h=127*h+(unsignedchar)*s;
++s;
}
returnh;
}

\u8fd9\u53e5\u8bdd\u7684\u610f\u601d\u5c31\u662f\uff1a
\u5bf9\u4e00\u4e2a\u6570\u5b9e\u65bd\u5de6\u79fb\u64cd\u4f5c=\u5bf9\u8fd9\u4e2a\u6570\u00d72\uff1b
\u5bf9\u4e00\u4e2a\u6570\u5b9e\u65bd\u53f3\u79fb\u64cd\u4f5c=\u5bf9\u8fd9\u4e2a\u6570\u00f72\u3002
\u8fd9\u4e2a\u662f\u8ba1\u7b97\u673a\u57fa\u672c\u7684\u4e8c\u8fdb\u5236\u64cd\u4f5c\uff0c\u56e0\u6b64\u4e0d\u4ec5\u4ec5\u5c40\u9650\u4e8eC\u8bed\u8a00\uff0c
\u4e8b\u5b9e\u4e0a\u7edd\u5927\u591a\u6570\u8ba1\u7b97\u673a\u7f16\u7a0b\u8bed\u8a00\u90fd\u652f\u6301\u8fd9\u4e2a\u64cd\u4f5c\u3002
\u7406\u89e3\u5f88\u5bb9\u6613\uff1a
\u4e00\u4e2a\uff08\u5341\u8fdb\u5236\u7684\uff09\u6570\uff0c\u5728\u7535\u8111\u91cc\u9762\u90fd\u53ef\u4ee5\u6309\u4e8c\u8fdb\u5236\u8868\u793a\u3002
\u6bd4\u5982\u6570\u5b578\uff0c
\u4e8c\u8fdb\u5236\u5c31\u662f1000.
\u5de6\u79fb\u4e00\u4f4d\uff0c1000
<<
1
=
0001
0000
=
16,
\u56e0\u6b64\u5c31\u662f=8\u00d72\uff1b\u540c\u7406\u53f3\u79fb\u4e00\u4f4d\uff0c
1000
>>
1
=
0100
=
4,
\u5c31\u662f8\u00f72.
\u4e00\u4e2a\u5341\u8fdb\u5236a\uff08\u8fd9\u91cc\u5148\u4ee5\u6b63\u6574\u6570\u4e3a\u4f8b\u8bf4\u660e\uff09\uff0c
\u603b\u53ef\u4ee5\u8868\u793a\u6210\uff1a
a
=
a[n-1]*2^(n-1)+a[n-2]*2(n-2)
+
....
a[1]*2^1
+
a[0]+2^0;
\u8fd9\u91cca[n-1]....a[0]\u7684\u53d6\u503c\u8303\u56f4\u5c31\u662f0\u62161\uff0c\u5c31\u662f\u4e00\u4e2a\u4e8c\u8fdb\u5236\u6570\u5404\u4e2a\u4f4d\u4e0a\u6743\u7cfb\u6570\u3002
\u5047\u8bbea[i]
<<
k;
a[i]
->
a[i+k];
\u5b83\u5bf9\u6574\u4e2a\u6570\u7684\u8d21\u732e\u503c\uff0c\u4ece2^i
->
2^(i+k)
=
2^i
\u00d7
2^k,
\u4e8c\u8fdb\u5236\u7684\u6bcf\u4e00\u4f4d\u90fd\u8fd9\u6837\u64cd\u4f5c\uff0c\u56e0\u6b64\u8fd9\u4e2a\u6570\u5c31\u88ab\u653e\u5927\u4e862^k\u500d\u3002\u5f53k=1\u7684\u65f6\u5019\uff0c\u5c31\u662f\u00d72\uff1b\u540c\u7406\u53f3\u79fb\u5c31\u662f\u00f72^k.

给你举个例子吧

比如说,A=7;
把A化成二进制的就是111;
A/2是十进制的运算,也就是7/2 = 3;
A>>=1是将A的二进制位向右移一位,也就得到011,结果也是3;

一般情况下这两种运算结果都会相同的,
如7 = 1*2^2+1*2^1+1*2^0;
除以2以后 1*2^1+1*2+1*2^-1;
结果也就差在最后的那个0.5上,但是,/是整出,最后的0.5会舍去,所以结果应该会相同;

左移时总是移位和补零。右移时无符号数是移位和补零,此时称为逻辑右移;而有符号数大多数情况下是移位和补最左边的位(也就是补最高有效位),移几位就补几位,此时称为算术右移。

  • c璇█涓璐熸暟闄ゆ硶鍜屽彸绉荤殑鍖哄埆
    绛旓細鎴戜滑鍙互灏嗗叾鎸夌収8浣嶄簩杩涘埗灞曞紑-3鐨8浣嶄簩杩涘埗鏄1000 0011,璐熸暟鍦ㄨ绠楁満涓槸浠ヨˉ鐮佺殑褰㈠紡瀛樺偍鐨勶紝鎵浠ヨ繕闇瑕佸皢鍏惰浆鎹㈡垚琛ョ爜1000 0011 杞崲鎴愬弽鐮 1111 1100(鏈楂樹綅绗﹀彿浣嶄笉鍔), 鍐嶅姞1杞崲鎴愯ˉ鐮1111 1101 鎺ョ潃灏嗗叾鍙崇Щ1浣锛岀敱浜庢槸鏈夌鍙疯礋鏁存暟锛屾墍浠ユ渶楂樹綅琛1锛屽彉涓1111 1110 鎺ョ潃灏嗗叾...
  • 璇烽棶C璇█楂樻墜浜 鎶11000000鍒嗗埆鍙崇Щ(0~7浣)涔嬪悗鍒嗗埆鍚勬槸澶氬皯(浜杩涘埗鏁...
    绛旓細姣忔鍙崇Щ閮芥槸楂樹綅琛0锛屾渶浣庝綅涓㈠純锛屾瘮濡鍙崇Щ1浣锛屾渶浣浣嶇殑0涓㈠純锛屾渶楂樿ˉ0锛屽彉涓01100000.鍙崇Щ0浣11000000 鍙崇Щ1浣01100000 鍙崇Щ2浣00110000 鍙崇Щ3浣00011000 鍙崇Щ4浣00001100 鍙崇Щ5浣00000110 鍙崇Щ6浣00000011 鍙崇Щ7浣00000001 鍏跺疄鍙崇Щ涓娆′篃鐩稿綋浜闄や互2,...
  • c璇█涓殑>>鍜<<鍒嗗埆鏄粈涔堟剰鎬濆晩?
    绛旓細C璇█涓殑>>鍜<<鍒嗗埆鏄乏绉昏繍绠楃鍜屽彸绉杩愮畻绗︼紝鐢ㄤ簬鏁存暟鍦ㄤ簩杩涘埗褰㈠紡鐨勭Щ浣嶈繍绠椼1銆佸乏绉昏繍绠楃锛<<锛夎鍒欙細鎸変簩杩涘埗褰㈠紡鎶婃墍鏈夌殑鏁板瓧鍚戝乏绉诲姩瀵瑰簲鐨勪綅鏁帮紝楂樹綅绉诲嚭(鑸嶅純)锛屼綆浣嶇殑绌轰綅琛ラ浂銆傝娉曟牸寮忥細闇瑕佺Щ浣嶇殑鏁板瓧 << 绉讳綅鐨勬鏁帮紝渚嬪锛 3 << 2锛屽垯鏄皢鏁板瓧3宸绉2浣銆傛暟瀛︽剰涔夛細鍦ㄦ暟瀛...
  • C璇█涓綅绉浣嶈繍绠楃?
    绛旓細c璇█浣杩愮畻绗﹀寘鎷 浣嶉昏緫杩愮畻绗 鍜 绉讳綅杩愮畻绗︺備綅閫昏緫杩愮畻绗︼細&鎸変綅涓庯紝|鎸変綅鎴栵紝^鎸変綅寮傛垨锛寏鍙栧弽 绉讳綅杩愮畻绗︼細<<宸︾Щ锛>>鍙崇Щ --- &鎸変綅涓庤繍绠楃锛浜杩涘埗涓繍绠,0&0=0,0&1=0,1&0=0,1&1=1锛岀浉褰撲簬甯冨皵鍨嬬殑涓庤繍绠 |鎸変綅鎴栬繍绠楃锛氫簩杩涘埗涓繍绠楋紝0|0=0,0|1=1,1|0=1,...
  • C绋嬪簭涓,宸︾Щ鈥<<鈥濄鍙崇Щ鈥>>鈥 鐨勫叿浣撶敤娉曟槸浠涔?
    绛旓細C璇█涓锛屸<<鈥濅负宸︾Щ杩愮畻绗︼紝鈥>>鈥濅负鍙崇Щ杩愮畻绗︺傚叿浣撲娇鐢ㄦ柟娉曞涓嬶細1銆佸乏绉昏繍绠楃(<<)灏嗕竴涓繍绠楀璞$殑鍚浜杩涘埗浣嶅叏閮ㄥ乏绉昏嫢骞蹭綅(宸﹁竟鐨勪簩杩涘埗浣嶄涪寮冿紝鍙宠竟琛0)銆備緥:a = a << 2 灏哸鐨勪簩杩涘埗浣嶅乏绉2浣嶏紝鍙宠ˉ0锛屽乏绉1浣鍚巃 = a * 2; 鑻ュ乏绉绘椂鑸嶅純鐨勯珮浣嶄笉鍖呭惈1锛屽垯姣忓乏绉...
  • C璇█缂栧啓涓涓嚱鏁板皢涓涓鏁存暟寰幆鍙崇Щ
    绛旓細include<stdio.h> define N 1000 void reverser(int *a,int n,int m){ int i,k=0,t;k=n%m;for(i=0;i<=(m-1)/2;i++)//灏嗘暟瀛楁崲涓哄師鏉鏁存暟鐨褰㈠紡 { t=a[m-1-i];a[m-1-i]=a[i];a[i]=t;} while(k>0)//绉讳綅 { t=a[m-1];//灏嗘渶鍚庝竴涓暟瀛楁殏瀛橈紒for(i=m-2...
  • c璇█涓鏁板瓧鍏鍙崇Щ24浣嶅啀闄や互256鍙栦綑鏄粈涔堟剰鎬???姹傞珮浜烘寚瀵煎晩_鐧惧害鐭 ...
    绛旓細c璇█涓鏁板瓧鍙崇Щ1浣鐩稿綋浜闄や互2锛堟暣闄わ級鍥犱负2鐨8娆℃柟=256锛岄櫎浠256鍙栦綑鐩稿綋浜庡彇鍚8浣 c璇█涓暟瀛楀厛鍙崇Щ24浣嶅啀闄や互256鍙栦綑 鐩稿綋浜庡彇杩欎釜鏁扮殑25-32浣 鍋囪嫢杩欎釜鏁版槸32浣嶇殑IP鍦板潃锛192.168.1.1锛夛紝鐩稿綋浜庡彇IP鍦板潃涓渶鏈鍓嶉潰鐨勪竴涓暟锛192锛
  • C璇█涓int mid=(l+r)>>1鏄粈涔堟剰鎬?
    绛旓細l+r鐨勫鍙崇Щ1浣锛岀浉褰搇+r鐨勫闄や互2鍙栨暣銆侷nt鏄皢涓涓暟鍊煎悜涓嬪彇鏁翠负鏈鎺ヨ繎鐨勬暣鏁扮殑鍑芥暟銆侷NT鏄暟鎹簱涓父鐢ㄥ嚱鏁颁腑鐨勫彇鏁村嚱鏁帮紝甯哥敤鏉ュ垽鍒竴涓暟鑳藉惁琚彟涓涓暟鏁撮櫎銆侰璇█鏄竴闂ㄩ氱敤璁$畻鏈虹紪绋嬭瑷锛屽簲鐢ㄥ箍娉涖C璇█鐨璁捐鐩爣鏄彁渚涗竴绉嶈兘浠ョ畝鏄撶殑鏂瑰紡缂栬瘧銆佸鐞嗕綆绾у瓨鍌ㄥ櫒銆佷骇鐢熷皯閲忕殑鏈哄櫒鐮佷互鍙婁笉...
  • C璇█涓绉讳綅杩愮畻
    绛旓細00101011锛2锛&10010100锛2锛00000000锛2锛c璇█婧愪唬鐮侊細include <stdio.h>main(){int a=43;int b = 148;printf("%d",a&b);} 锛2锛夊彇涓涓暟涓煇浜涙寚瀹氫綅锛氳嫢鏈変竴涓鏁存暟a(2byte),鎯宠鍙栧叾涓殑浣庡瓧鑺傦紝鍙渶瑕佸皢a涓8涓1鎸変綅涓庡嵆鍙俛 00101100 10101100 b 00000000 11111111 c 00000000 ...
  • c璇█ 涓殑 >> 鏄粈涔堟剰鎬 int r=8; printf("%d/n",r>>1);
    绛旓細鈥>>鈥濇槸C璇█涓殑浣嶆搷浣滅锛屽湪璋旦寮虹殑銆奀绋嬪簭璁捐銆嬩腑绗12绔犺浣嶈繍绠楃殑閲岄潰鏈夎鍒版湁鍏充綅鎿嶄綔鐨勭煡璇嗐傗渞>>1鈥 鎸変綅鍚戝彸绉诲姩1浣锛8鐨浜杩涘埗鐮侊細00001000鍙崇Щ鍚庯細00000100锛岃浣忔槸姣忎竴浣嶉兘鍙崇Щ锛屽锛歛=163,浜岃繘鍒讹細10100011锛宎>>2鍚庯細00101000锛岀Щ浣嶅悗瓒呭嚭鐨勮嚜鍔ㄥ幓鎺夈傚彟澶栬繕鏈夆<<"宸绉讳綅锛...
  • 扩展阅读:c#加减乘除 ... 小数除法教学视频 ... c++加减乘除运算编程 ... c#多线程面试题及答案 ... 循环移位右移i位 ... 双重∑∑求和用法 ... 整数除分数口算100题 ... 整数除法计算题 ... 3.17循环左移和循环右移 ...

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