用加减乘除实现位运算 位运算可以实现什么?(加减乘除等除外)

\u7528\u52a0\u51cf\u4e58\u9664\u5b9e\u73b0\u4f4d\u8fd0\u7b97

//\u5199\u5f97\u8be6\u7ec6\u7684\u4f60\u4e0d\u91c7\u7eb3
//\u7ed9\u4e24\u4e2a\u4e2a\u516c\u5f0f\u5427
//\u6700\u4f4e\u4e24\u4f4d\u6570\u636e
f(x)
=
x
-
(x
/
4
-
x
/
4
*
4
/
(x
*
2))
*
4
//\u6b21\u4f4e\u4e24\u4f4d\u6570\u636e
g(x)
=
((x
-
(x
/
16
-
x
/
16
*
16
/
(x
*
2))
*
16)
-
(x
-
(x
/
4
-
x
/
4
*
4
/
(x
*
2))
*
4))
/
4
//\u5b8c\u5168\u7b26\u5408\u4f60\u7684\u8981\u6c42
//\u518d\u4e0d\u91c7\u7eb3\u5c31\u6ca1\u610f\u601d\u5566

\u4f4d\u8fd0\u7b97\u53ea\u662f\u4e00\u79cd\u6bd4\u52a0\u51cf\u4e58\u9664\u66f4\u7b80\u5355\u7684\u8fd0\u7b97\uff0c\u548c\u5206\u652f\u5faa\u73af\u5b8c\u5168\u6ca1\u5173\u7cfb\uff0c\u5f88\u591a\u52a0\u5bc6\u89e3\u5bc6\u7b97\u6cd5\uff0c\u6216\u8005\u64cd\u4f5c\u786c\u4ef6\u7684\u4ee3\u7801\u4e2d\uff0c\u4f4d\u8fd0\u7b97\u662f\u5fc5\u4e0d\u53ef\u5c11\u7684

\u4f60\u7528\u4f4d\u8fd0\u7b97\u5bf9\u6bd4\u903b\u8f91\u95e8\u7535\u8def\u4e5f\u662f\u53ef\u4ee5\u7684\uff0c\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u770b\u5f53\u7136\u4f4d\u8fd0\u7b97\u53ef\u4ee5\u5b9e\u73b0\u4e00\u5207\uff0c\u4f46\u662f\u8981\u5168\u5217\u4e3e\u51fa\u6765\u5c31\u5f88\u9ebb\u70e6\uff0c\u76f8\u5f53\u4e8e\u5b9e\u73b0\u4e00\u4e2a\u865a\u62df\u673a\uff0c\u8ba1\u7b97\u673a\u8f6f\u4ef6\u6982\u5ff5\u662f\u5206\u5c42\u7684\uff0c\u7b2c1\u5c42\u5b9e\u73b0\u4e86\u7b2c2\u5c42\uff0c\u4f60\u53ef\u4ee5\u7528\u7b2c2\u5c42\u53bb\u7c7b\u6bd4\u7b2c1\u5c42\u7136\u540e\u5b9e\u73b0\u7b2c3\u5c42\uff0c\u4f46\u6ca1\u6cd5\u7528\u7b2c2\u5c42\u53bb\u76f4\u63a5\u5b9e\u73b0\u7b2c2\u5c42\uff0c\u9664\u975e\u662f\u7528\u57fa\u672c\u529f\u80fd\u53bb\u5b9e\u73b0\u5197\u4f59\u529f\u80fd\uff0c\u4f46if\u662f\u57fa\u672c\u529f\u80fd\u4e4b\u4e00\uff0c\u5f53\u7136\u4e5f\u53ef\u4ee5\u5229\u7528\u7b2c1\u5c42\u7684\u6f0f\u6d1e\uff0c\u5728\u7b2c2\u5c42\u4fb5\u5165\u7b2c1\u5c42\uff0c\u501f\u6b64\u5f71\u54cd\u7b2c1\u5c42\u800c\u5b9e\u73b0\u7b2c2\u5c42\u7684\u57fa\u672c\u529f\u80fd\uff0c\u6bd4\u5982\u9ed1\u5ba2\u7ecf\u5e38\u5229\u7528\u7684\u5806\u6808\u6ea2\u51fa\u6f0f\u6d1e\uff0c\u4f46\u8fd9\u79cd\u65b9\u6cd5\u4e0d\u662f\u901a\u5e38\u610f\u4e49\u7684\u201c\u5b9e\u73b0\u201d

首先 要知道是要取多少位,比如是1 3两位
这里要做一个约定,就是从低位开始标记,从0下标开始 D0 D1 ... D20...D31(假设总位数32位)
这个约定很重要,不然没法说明白了
然后,程序默认是四舍五入,这个比较麻烦,因为计算的时候要做到的是无条件舍去
所以在做除法的时候先减去被除数一半
设原始数为A

计算过程
提取Di
中间变量x
x= (A-2^(i-1))/(2^i) 这一步操作相当于A>>i
判断x是奇数还是偶数,如果是奇数 那么Di=1,否则Di=0
如果不支持%的话,再由于四舍五入的特性 可以判断
x/2*2==x 如果是奇数 那么x/2*2会是x+1,是偶数则相等
这样就提取出来Di了

合成两位数就简单了
假设提取Di Dj i>j
那么最终的数R=Di*2+Dj

例子:
设原始数字为110 提取D1 D3
D1=(110-2^(0))/(2^1)=(110-1)/2=54.5=55
奇数 D1=1
D3=(110-2^(2))/(2^3)=(110-4)/8=13.25=13
奇数
D3=1

结果R=1*2+1=3

要分两步,第一步是转换成四进制,
第二步是取余
这两步都能用四则运算实现,很简单

不过你没有说清楚你的四则运算里的除法是整除,还是带小数的。如果带小数的话,很遗憾的告诉你,不可能。整除的话我可以跟你说

//写得详细的你不采纳
//给两个个公式吧
//最低两位数据 f(x) = x - (x / 4 - x /
4 * 4 / (x * 2)) * 4
//次低两位数据 g(x) = ((x - (x / 16 -
x / 16 * 16 / (x * 2)) * 16) - (x - (x /
4 - x / 4 * 4 / (x * 2)) * 4)) / 4
//完全符合你的要求
//再不采纳就没意思啦

  • 鐢ㄥ姞鍑忎箻闄ゅ疄鐜颁綅杩愮畻
    绛旓細棣栧厛 瑕佺煡閬撴槸瑕佸彇澶氬皯浣嶏紝姣斿鏄1 3涓や綅 杩欓噷瑕佸仛涓涓害瀹氾紝灏辨槸浠庝綆浣嶅紑濮嬫爣璁帮紝浠0涓嬫爣寮濮 D0 D1 ... D20...D31(鍋囪鎬讳綅鏁32浣)杩欎釜绾﹀畾寰堥噸瑕侊紝涓嶇劧娌℃硶璇存槑鐧戒簡 鐒跺悗锛岀▼搴忛粯璁ゆ槸鍥涜垗浜斿叆锛岃繖涓瘮杈冮夯鐑︼紝鍥犱负璁$畻鐨勬椂鍊欒鍋氬埌鐨勬槸鏃犳潯浠惰垗鍘 鎵浠ュ湪鍋氶櫎娉曠殑鏃跺欏厛鍑忓幓琚櫎鏁颁竴鍗 璁惧師...
  • 浣嶈繍绠 璁$畻鏈烘渶搴曞眰鐨鍔犲噺涔橀櫎鏄浣瀹炵幇鐨
    绛旓細8鐨勪簩杩涘埗鏈鍚庡洓浣嶆槸锛1000(鍏跺疄鍓嶉潰杩樻湁寰堝浣嶏紝鍙笉杩囨槸0锛屾墍浠ユ垜鐪佺暐浜)2鐨勪簩杩涘埗鏈鍚庡洓浣嶆槸: 0010 閭d箞璁$畻鏈杩愮畻鏃舵槸瀵逛簩杩涘埗杩涜澶勭悊鐨勶細涔熷氨鏄 1000 +0010 =1010;閭d箞1010鍐嶈浆鍖栨垚鍗佽繘鍒讹紝灏辨槸10浜嗭紝鎵浠ヨ绠楁満鍙互杈撳嚭10杩欎釜绛旀
  • 涓や釜鍙橀噺鐨勪氦鎹,濡備綍鐢ㄥ姞鍑忎箻闄鏉ュ畬鎴?
    绛旓細a = a^b;b = a^b;a = a^b;3銆涔橀櫎娉曪細鍙互澶勭悊鏁村瀷鍜屾诞鐐瑰瀷鍙橀噺锛屼絾鍦ㄥ鐞嗘诞鐐瑰瀷鍙橀噺鏃朵篃瀛樺湪绮惧害鎹熷け闂銆傝屼笖涔橀櫎娉曟瘮鍔犲噺娉曡澶氫竴鏉$害鏉燂細b蹇呬笉涓0銆俛 = a * b b = a / b a = a / b 鍏朵腑鍔犲噺锛屼箻闄ゅ鏄撹秺鐣岋紝鐢ㄤ綅杩愮畻寮傛垨鏁堢巼鏈楂橈紝涓斾笉浼氳秺鐣屻浣跨敤浣嶈繍绠浜ゆ崲涓や釜鏁帮紝...
  • 鍔犲噺涔樿繍绠閮芥槸浠庝綆浣嶅紑濮,涓轰綍闄ゆ硶瑕佷粠楂樹綅寮濮嬭绠?
    绛旓細鍔犲噺涔橀櫎鏄4鍒欏熀鏈殑杩愮畻娉曞垯锛鍩烘湰閮芥槸浠庝綆浣嶅紑濮嬬畻锛屼絾鏄櫎娉曟槸浠庨珮浣嶅紑濮嬬畻锛屽洜涓烘垜浠娓呮鍔犲噺涔橀櫎锛屽畠鍏跺疄灏辨槸涓や釜浣撶郴鍔犲噺锛屼竴涓槸姝e悜鐨勶紝涓涓槸閫嗗悜鐨勶紝涔橀櫎涔熸槸涓涓槸姝e悜鐨勶紝涓涓槸閫嗗悜鐨勩傛垜浠彲浠ョ畝鍗曠殑鎶婁箻闄ょ悊瑙f垚涓涓綋绯伙紝鍥犱负闄ゆ硶鏌愮绋嬪害涓婃潵璇达紝瀹冨氨鏄箻娉曠殑閫嗚繍绠楋紝涓よ呮槸绛変环鐨...
  • c璇█鐨鍔犲噺涔橀櫎鏄庝箞瀹炵幇鐨
    绛旓細鏈川涓婇兘鏄綅杩愮畻銆 鍔犳硶閫氳繃寮傛垨銆佷笖鍜屽乏绉婚掑綊瀹炵幇銆傝a锛宐涓轰袱涓簩杩涘埗鏁帮紝鍒檃+b = a^b + (a&b)<<1锛涘吀鍨嬬殑瀹炵幇浠g爜锛//閫掑綊鐗堟湰鐨勫姞娉昳nt Add(int a, int b){ return b ? Add(a^b, (a&b)<<1) : a; }//杩唬鐗堟湰int Add_iter(int a, int b){ int ans; ...
  • c璇█涓閫氳繃浣嶈繍绠鎶婁竴涓鏁存暟鍙樻垚瀵瑰簲鐨勮礋鏁
    绛旓細姹傚弽鍔犱竴锛屽嵆鍙備絾鏄紝杩欓噷杩樻槸瑕佺敤涓娆″姞娉曘
  • 5涓5鍔犲噺涔橀櫎绛変簬24,鍑犵绠楁硶
    绛旓細浜岀绠楁硶銆傚垎鏋愯繃绋嬪涓嬶細鏂规硶涓锛氾紙5脳5脳5-5锛壝5 =锛125-5锛壝5 =120梅5 =24 鏂规硶浜岋細锛5-5梅5梅5锛壝5 =锛5-1梅5锛壝5 =锛24/5锛壝5 =24
  • 姹傜敤vhdl璇█缂栧啓涓涓彲瀹炵幇鍔犲噺涔橀櫎銆佸彲绉讳綅鐨16浣嶈繍绠鍣
    绛旓細鏄敤BCD鐮佽〃绀哄崄杩涘埗鍚楋紵鍙互姣忓洓浣嶅垎寮鐪嬨傛瘮濡侭CD鐮乹(11 downto 0)鍙互琛ㄧず0鍒999锛屽墠鍥涗綅鏄釜浣嶏紝涓洓浣嶆槸鍗佷綅锛屽悗鍥涗綅鏄櫨浣嶃備笉鐭ラ亾瀵逛簬婧㈠嚭鐨勬湁浠涔堣姹傦紝鎴戣鎴愭孩鍑哄悗涓嶅仛浠讳綍杩愮畻銆俵ibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity add_sub is port...
  • 閫昏緫杩愮畻鍙惁鐢ㄥ姞娉瀹炵幇
    绛旓細浣嶈繍绠楀彧鏄竴绉嶆瘮鍔犲噺涔橀櫎鏇寸畝鍗曠殑杩愮畻锛屽拰鍒嗘敮寰幆瀹屽叏娌″叧绯伙紝寰堝鍔犲瘑瑙e瘑绠楁硶锛屾垨鑰呮搷浣滅‖浠剁殑浠g爜涓紝浣嶈繍绠楁槸蹇呬笉鍙皯鐨 浣鐢ㄤ綅杩愮畻瀵规瘮閫昏緫闂ㄧ數璺篃鏄彲浠ョ殑锛屼粠杩欎釜瑙掑害鐪嬪綋鐒朵綅杩愮畻鍙互瀹炵幇涓鍒囷紝浣嗘槸瑕佸叏鍒椾妇鍑烘潵灏卞緢楹荤儲锛岀浉褰撲簬瀹炵幇銆
  • C璇█涓寜浣嶈繍绠绗︿箣闂存湁娌℃湁绫讳技鏁板涓鍔犲噺涔橀櫎鐨勮繍绠楀緥鐨勫叧绯
    绛旓細鈷夊熀鏈杩愮畻鍙湁鈥滀笌鈥濄佲滄垨鈥濄佲滈潪鈥濅笁绉嶃備笌杩愮畻锛堥昏緫涓庛侀昏緫涔橈級瀹氫箟涓猴細0路0=0 0路1=0 1路0=0 1路1=1 鎴栬繍绠楋紙閫昏緫鎴栥侀昏緫鍔狅級瀹氫箟涓猴細0+0=0 0+1=1 1+0=1 1+1=1 浜屻佸熀鏈叕寮忥紙路琛ㄧず&锛+琛ㄧず| 锛夊鏋滅敤瀛楁瘝鏉ヤ唬鏇挎暟锛堝瓧姣嶇殑鍙栧奸潪0鍗1锛夛紝鏍规嵁甯冨皵瀹氫箟鐨勪笁绉嶅熀鏈...
  • 扩展阅读:运算定律与简便运算 ... 乘除先后顺序能变吗 ... 加减乘除对联 ... 二年级混合乘除300道 ... 简便运算四年级 ... 加减乘除口诀表大全 ... 三年数学50道混合运算 ... 加减乘除万能口诀 ... 二年级混合运算500道 ...

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