C/C++用移位實現乘除法運算,提高執行效率
用移位實現乘除法運算
a=a*4;
b=b/4;
可以改為:
a=a<<2;
b=b>>2;
說明:
除2 = 右移1位 乘2 = 左移1位
除4 = 右移2位 乘4 = 左移2位
除8 = 右移3位 乘8 = 左移3位
... ...
通常如果需要乘以或除以2的n次方,都可以用移位的方法代替。
大部分的C編譯器,用移位的方法得到程式碼比呼叫乘除法子程式生成的程式碼效率高。
實際上,只要是乘以或除以一個整數,均可以用移位的方法得到結果,如:
a=a*9
分析a*9可以拆分成a*(8+1)即a*8+a*1, 因此可以改為: a=(a<<3)+a
a=a*7
分析a*7可以拆分成a*(8-1)即a*8-a*1, 因此可以改為: a=(a<<3)-a
關於除法讀者可以類推, 此略.
相關推薦
C/C++用移位實現乘除法運算,提高執行效率
用移位實現乘除法運算 a=a*4; b=b/4; 可以改為: a=a<<2; b=b>>2; 說明:除2 = 右移1位 乘2 = 左移1位 除4 = 右移2位 乘4 = 左
C/C++中移位實現乘除法運算
用移位實現乘除法運算 a=a*4; b=b/4; 可以改為: a=a<<2; b=b>>2; 說明: 除2 = 右移1位 乘2 = 左移1位 除4 = 右移2位
c語言用棧實現帶括號運算的簡單計算器
c語言用棧實現帶括號的簡單計算器 寫的簡單,棧部分實現比較粗略,可能有沒考慮到的地方 目錄 整體步驟分為三步: 1.棧的簡單實現 2.中綴轉換為字尾 3.字尾運算 1.棧的簡單實現 typedef struct sta
C#調用AForge實現攝像頭錄像
需要 version com targe supported .cn strong odin logs 1: 首先下載庫文件>> 也可以去官網尋找>> 下載本教程全代碼>> 輸出為MP4需要用到ffmpeg相關的文件,我打包的庫已經帶了,
使用移位運算子做乘除法運算
一個整數每次執行移位運算中的左運算n次,相當於這個整數乘以2的n次方; 一個整數每次執行移位運算中的右運算n次,相當於這個整數除以2的n次方; 不過這種方式只能用於乘以除以2的n次方,但是他的效率比乘法運算要高; public class Main { public
C語言用DFS實現找到圖的所有路徑(鄰接矩陣實現)
以下是例子,所有圖的DFS遍歷,只需要修改createGraphics()函式即可,即生成自己的map(鄰接矩陣),就可以找到兩個點之間所有的路徑。 1.問題如下: 輸入一個矩陣的行數r(5-10)與列數c(5-10),生成一個無向圖,該圖每行有c個頂點每列有r個頂點
【C/C++】用指標實現二維陣列的傳遞、使用的4種示例,及各種變形。
請看例程。 #include <stdio.h> #include <stdlib.h> /* *func1:用int a[]傳遞二維陣列 *func2:用int a[][10]傳遞二維陣列 *func3:用int *a[10]傳遞二維 *
(C語言)用函式實現求三個數最大值
題目描述:從鍵盤輸入三個數,之後呼叫函式實現求三個數的最大值 程式碼實現: #include<stdio.h> int main() { int qmax(int a,int b,int c); //求最大值函式的宣告 int x,y,z; int max
用java實現分數各種運算(加減乘除,求餘,求冪,求兩個數中的較大值,較小值)
package Rational; import java.util.StringTokenizer; /** * @author SunKun * 分數四則運算 */ public class Calculator { int numerator; // 分子 int denominator
c語言 用牛頓迭代法求方程在1 5附近的根 2x 3-4x 2+3x-6 0
用牛頓迭代法求方程在1.5附近的根:2x^3-4x^2+3x-6=0. 解:牛頓迭代法又叫牛頓
C++ 練習:用指標實現棧
使用C++的指標實現一個簡單版的棧 stack.h #ifndef stack_hpp #define stack_hpp #include <stdio.h> class St
C#練習——用方法實現兩個數的最大值
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T
C語言用巨集實現靜態多型
綜述 多型性是面向物件程式設計的一個重要特徵。 在C++語言中,多型指的是:具有不同功能的函式可以用同一個函式名,可以用一個函式名呼叫不同內容的函式。 C++的多型分為兩種: 1. 靜態多型性(編譯時多型):在程式編譯時系統就能決定呼叫的是哪個函式,因此稱為編譯時多型
C語言用指標實現兩個陣列值互換
C語言用指標實現兩陣列的值互換 #include <stdio.h> #define N 10 void ReadData(int a[], int n); void PrintDa
移位與乘除法的關係
移位實現的乘除法比直接乘除的效率高很多。 用移位實現乘除法運算 a=a*4; b=b/4; 可以改為: a=a<<2; b=b>>2; 說明: 除2 = 右移1位 乘2 = 左移1位 除4 = 右移2位 乘4 = 左移2位 除8
使用位運算加速乘除法運算
位運算 位運算的運算分量只能是整型或字元型資料,位運算把運算物件看作是由二進位組成的位串資訊,按位完成指定的運算,得到位串資訊的結果。 位運算子有: &(按位與)、|(按位或)、^(按位異或)、~ (按位取反)。 其中,按位取反運算子是單目運
加減乘除法運算(函數數組指針法)
int while break printf 加減乘 加減 inpu else if ret #include<stdio.h> double add(double x, double y)//加 { return x + y; } double su
用PHP實現守護程序任務後臺執行與多執行緒(php-resque使用說明)
訊息佇列處理後臺任務帶來的問題 專案中經常會有後臺執行任務的需求,比如傳送郵件時,因為要連線郵件伺服器,往往需要5-10秒甚至更長時間,如果能先給使用者一個成功的提示資訊,然後在後臺慢慢處理髮送郵件的操作,顯然會有更好的使用者體驗。 為了實現類似的需求,We
順序表應用6:有序順序表查詢(利用了二分法來提高演算法效率)
順序表應用6:有序順序表查詢 Time Limit: 1000 ms Memory Limit: 4096 KiB Problem Description 順序表內按照由小到大的次序存放著n個互不相同的整數,任意輸入一個整數,判斷該整數在順序表中是否存在。如果在順序
用charindex代替like中的%提高查詢效率
如: select * from [table1] where [field1] like ‘%test%’ 可以用如下語句代替: select * from [table1] where charindex('test', [field1]) > 0