日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

位运算符实现加法和乘法

發(fā)布時間:2025/3/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 位运算符实现加法和乘法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 加法:
    • 乘法:
      • 問題1:
      • 問題2:

加法:

#include <iostream> using namespace std; int main() {int x, y;cin >> x >> y;int z = x ^ y;int d = x & y;if (d) {while (d) {int end = (d << 1); d = (end & z);z = (end ^ z);}printf("%d",z);}else {printf("%d", z);}}

異或本身就是不進位的加法,用異或之后然后進行是否有需要進位的判斷,如果需要進位的話,那么進行左移一位(因為進位是進前一位),進位完后,進行異或相加,加完之后需要再次判斷是否有進位(因為一次相與只判斷一次相加進位),并不能代表進位一次后不存在第二次進位,或者第三次比如:二進制1111+0001,就需要進位4次

乘法:

#include <iostream> using namespace std; int main() {int x, y,z,input,inputs;cin >> input >> inputs;x = inputs;y = inputs;for (int i = 0; i <input-1; i++) {z = x ^ y;int d = x & y;//d=4int ands;if (d) {while (d) {int end = (d << 1);d = (end & z);z = (end ^ z);}x = z; }else {x = z; }}printf("%d", x); }

乘法的問題有點多的,我調(diào)了半小時,問題如下:

問題1:

z = (end ^ z);

這行代碼起初我直接用個新的ands變量來接收,那樣的話,第二次異或的時候仍然異或的是z = x ^ y;這個變量,那樣的話,只異或一次是對的,異或兩次以上,直接出錯

問題2:

d = (end & z);z = (end ^ z);

這兩行代碼順序不能顛倒,顛倒之后算出值為負(fù)數(shù),因為循環(huán)指定是d值判斷,d又是靠之前的z值,而不是計算后的z值

總結(jié)

以上是生活随笔為你收集整理的位运算符实现加法和乘法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。