用位操作實現加法運算
問題描述:
對下面程式碼中的a進行位操作(只能進行位運算),實現輸出OPQ
int a = 0x434241;
printf("%s\n", (char*)&a);
參考程式碼:
#include <stdio.h>
int add(int a, int b)
{
//思路: a+b=a^b + (a&b)<<1;其中a^b是不考慮進位的加,只有位相同才有進位所以(a&b)<<1則是進位的值,
//每進行一次操作,進位末尾補0,也就是說,最多進行b的二進位制位數次操作即可完成計算
if (b == 0)
return a;
return add(a ^b, (a&b) << 1);
}
int main()
{
int a = 0x434241;
//a = (a ^ 0x51504F) ^ a;
a = add(a, 0x0e0e0e);
printf("%s\n", (char*)&a);
return 0;
}
相關推薦
用位操作實現加法運算
問題描述: 對下面程式碼中的a進行位操作(只能進行位運算),實現輸出OPQ int a = 0x434241; printf("%s\n", (char*)&a); 參考程式碼: #include <stdio.h> int a
CSAPP: 位操作實現基本運算
目錄 實驗要求 實現程式碼 1、pow2plus1 2、pow2plus4 3、bitXor 4、tmin 5、isTmax 6、allOddB
使用位操作實現加減乘除運算
前言 在實際應用中一定要注意邊界問題,包括上邊界和下邊界 注意: 位操作中常用的公式 a=n&(n-1);//去掉n中最右邊的1; b=n&(-n);//得到n中最右邊的1 -n==~
演算法:只用位操作實現+、-、*、/、冪次運算
最近零星看到一些位操作的演算法題,看題目都有類似的套路,不用常規算術運算,只用位操作和判斷,實現+、-、*、/和冪次操作。之前都是看到了就做一做,今天寫這篇文章對此種類型的演算法題做統一整理。 加法 不用+號做加法?首先回顧一下我們小學時候學的加法運算是
用位向量實現的集合及其常用運算
這個程式是用位向量來實現的集合,用陣列的下標來表示集合中的元素,而陣列的元素0或1來表示集合有無該元素,因此,它適合於整數集合,且值不是很大的情況。 #include <iostream> #include <assert.h> using nam
通過位操作實現四則運算
test sub () return expect 意思 define 掌握 功能 在最早學習四則運算的過程中,我們其實就已經掌握了進制算法,這一次我將對二進制運用這個進制算法來實現四則運算。 四則運算 math.c /** * 功能:通過位操作實現四則運算 * 算法:
位操作實現加減乘除四則運算
tle 參與 nbsp pre 圖片 操作數 整數 spa 或操作 解決方案 需要熟練掌握一些常見的位操作實現,具體為: 1)常用的等式:-n=~(n-1)=~n+1 2)獲取整數n的二進制中最後一個1:n&(-n)或者n&~(n-1)如:n=010100,
通過重寫虛方法實現加法運算
實現效果: 知識運用: 虛方法:允許被其子類重新定義的方法 宣告時使用virtual修飾符 重寫方法:使用相同的簽名重寫繼承的虛方法 兩者聯絡:虛方法主要用來引入新方法 而重寫方法則使從基類繼承而來的虛方法的專用化(其具體實現) 實現程式碼:
位操作實現許可權繫結
第一次寫技術部落格,請大家批評指正。 今天老大交個一個任務,將資料中的許可權部分由以前的字串批註改成整形,即用二進位制開關來實現許可權的分配。 說明:以前我們做許可權也都是一個欄位 Power,然後讀取它的內容,比如“登陸,修改密碼,檢視日誌”,讀到什麼就說明有什麼許可權,有啥許可權也
A+B按位操作實現
Problem 1: Description: Write a function that add two numbers A and B. You should not use + or any arithmetic operators. a與b均為32位整數。不用加法
微控制器在清除標誌位時不要用位操作
這兩天在除錯一個專案的時候,一臺主機與兩臺從機通訊,但是有一臺從機的報文收不到,仔細閱讀程式碼,發現暫存器等配置都正常,自信閱讀程式碼發現在清接收完成暫存器的時候用到了位域,猜想這就是問題所在,於是修改了程式,下載後一切正常。在微控制器中一般的標誌暫存器都是寫
js中實現加法運算
1:首先JS是一種弱語言,但是同類型可以自己相加減 例如“a”+”b” 可以自動組成ab ; 1+ 2 自動變成3 var data = 2; var curren
c++ 位操作實現資料標誌位獲取與更新
<strong><span style="font-size:18px;">#include "stdafx.h" #include <iostream> usin
【資料結構】用連結串列實現多項式運算
一元多項式的運算包括加法減法和乘法,而多項式的加法和乘法都可以依靠多項式的加法來實現,所以本文僅僅講解如何用連結串列實現一元多項式的加法。 數學上的一元多項式的表示是p(x) = p0 + p1 * x + p2 * x^2 + p3 * x^3 + … +
Android studio 通過AIDL來實現加法運算
1:首先滑鼠右鍵點選專案新建AIDL Folder 2:在 aidl檔案右鍵新建AIDL File 3:刪除 或者無視裡面的內容,並寫下如下程式碼,並Rebuild project。 package com.dt.aidltest; int
不用‘+’實現加法運算
#include <iostream> using namespace std; int AddWithoutOperator(int num_1, int num_2) { if(num_2 == 0) { return num_1;
不用 + -× /實現加法運算
轉自何海濤部落格: #include "stdafx.h" #include <iostream> using namespace std; int new_add(int a,int b){ if(!b) return a; int temp=a^b;
用原子操作實現無鎖程式設計
假設我們要維護一個全域性的執行緒安全的 int 型別變數 count, 下面這兩行程式碼都是很危險的: count ++; count += n; 我們知道, 高階語言中的一條語句, 並不是一個原子操作. 比如一個最簡單的自增操作就分為三步: 1. 從快取取到暫存器 2.
23.位運算實現加法
turn 結果 add urn () pre col body class 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int add(int a, int b) 5 { 6
用位運算實現四則運算之加減乘除(用位運算求一個數的1/3) via Hackbuteer1
esp sub 沒有 正整數 過程 介紹 異或 sin 完成 轉自:http://blog.csdn.net/hackbuteer1/article/details/7390093 ^: 按位異或;&:按位與; | :按位或 計算機系統中,數值一律用補碼來表示:因為