使用位運算判斷整數是否可被2的冪(2、4、8、16……)整除?
作者:CodeArhat
來源:CSDN
原文:https://blog.csdn.net/codearhat/article/details/6821990
// 大部分位運算的技巧早在幾十年前就被前輩們在有限的計算環境下“榨”出來了。
// “原創”只是表示這篇文章是我所寫,並非翻譯或轉貼,但也絕不是我“首創”。
能被2^N整除(N >= 1),則a的二進位制表示中,低N位全為0,因此:
(a % 2) <==> (a & 1) (a % 4) <==> (a & 3) (a % 8) <==> (a & 7) (a % 16) <==> (a & 15) <==> (a & ((1 << 4) - 1)) ……
現在的編譯器已經足夠聰明,上面左邊的表示式很可能會被自動優化,所以可能看不出求餘與按位與的效能差距。
但能在DEBUG模式下快一點,還是有價值的。(設想正常要跑一分鐘的程式,除錯時需要10分鐘才能執行到你所下的斷點,會是多麼痛苦……)
相關推薦
使用位運算判斷整數是否可被2的冪(2、4、8、16……)整除?
作者:CodeArhat 來源:CSDN 原文:https://blog.csdn.net/codearhat/article/details/6821990 // 大部分位運算的技巧早在幾十年前就被前輩們在有限的計算環境下“榨”出來了。 /
c-1:位運算:實現整數的加減乘除四則運算
首先回憶計算機組成原理學過的內容,數字在機器ALU運算邏輯單元內部是以補碼形式進行運算的,因為補碼有兩個優勢:1、能做到符號位和數值部分一起運算,這樣無需單獨考慮符號。2、能把減法運算轉化為加法運算來處理。3、補碼的沒有正0和負0之分,所以表示範圍比原碼和反碼多1個。問題一: 位運算實現加法不管是十進位制加法
位運算判斷一個數是奇數還是偶數
在 leetcode 上刷題的時候,有道題需要判斷一個數是奇數還是偶數。看到大神寫的判斷方法。記錄一下 程式碼如下 int t = 3; // 要判斷的數. int odd = t &
位運算判斷一個數轉為二進位制後的第i位數上為0還是1
比如86的二進位制為1010101. w我們要求第五位二進位制位數上是0還是1,那麼我們可以通過位運算子的移位操作來進行 比如我們可以將86的二進位制1010101與1向左移4位來做與運算 就是1010101 與 0010000做與運算,看第五位是0還是1, 得出這個
垃圾回收之判斷物件否需要被回收(根搜尋演算法和引用搜索演算法)
根搜尋演算法(JAVA的虛擬機器用的是這個) 可以參考這個 http://blog.csdn.net/qq_15022971/article/details/79162126 引用搜索演算法:是常被初學JAVA者誤解,java的垃圾回收在判斷一個物件是否為可以被回收的物件時,常被誤以為
C/C++ 利用位運算優化整數乘法
對於大多數計算機而言,整數乘法要比整數加法、減法、位運算慢,通常是一個量級的差別。在這個前提下,對整數乘法用加法、減法、位運算替代,通常可以提高效能。 自《深入理解計算機系統》 由於整數乘法比移位和加法的代價要大得多,許多C 語言編譯器試圖以移位、加法和減法的組合來消除
判斷整數 x 能否表示成 n(n >= 2)個連續正整數的和
題目:如何判斷一個整數 x 是否可以表示成 n(n >= 2)個連續正整數的和。 思路分析: (1)假設 x 可以表示成 n(n >= 2)個連續正整數的和,那麼數學表示式如下:x =
利用位運算判斷陣列中是否有重複的數字
討論這個主題的來由是《劍指offer》上的一道題目: 解題思路: 只要滿足條件 1)陣列的長度為5; 2)陣列中的最大值減去最小值小於5(最大值、最小值不取0); 3)除0外沒有重複的數字
php 判斷變數是否可被 foreach處理
Traversable用於檢測一個類是否可以使用 foreach 進行遍歷,這是一個無法在 PHP 指令碼中實現的內部引擎介面,實際程式設計中我們使用Iterator介面或者IteratorAggregate介面來實現遍歷。 <?php if(
位運算在角色許可權設計中的應用(轉)
1.引言 2.位運算基礎 3.位運算在角色許可權設計中的應用 4.為什麼in32的範圍是-2^31 ~ 2^31-1 ? 5.同餘的概念 6.模的概念幫助理解補數和補碼。 一、引言 這周在做一個新增角色許可權需求時,遇到下面這樣一行程式碼,這篇文章將圍繞這行程式碼展開。 us
學以致用——Java原始碼——16位以內任意整數的逆序數的輸出(Reversing Digits)
這道題其實並不簡單,涉及: 1. 整數位數的計算 2. 整數各個位數的值的計算 3. 整數的構成 遺留問題:Java long資料型別最大支援Long.MAX_VALUE = 9223372036854775807(共19位),但經過測試,本程式僅支援16位以內的計算,超過後會發
一位華為離職員工的十年感悟(2)
二、“心有多大,舞臺就有多大”,我們很多的成功,來自於敢想,敢做,就象我第一次接到問題單,根本不懂,但敢去試,敢去解決,還真的解決了;就像我們做SPES,即使沒人、沒技術、沒積累,還有CISCO等大公司也在做,我們也敢做,敢推行,不盲目崇拜或畏懼權威,也取得了成功。當然,這不只是盲目的膽大,心大還意味著積極地
數獨:dfs+剪枝+位運算+排除冗余+優化搜索順序(未完)
main esp 測試用例 brush 數獨 方案 include blank \n 和藍橋杯以前一個題一樣,但是數據加強了,博主水平有限,沒做出來,先在這裏記錄一下,這裏正解,下面是博主的超時做法。最近準備考研,不能深入學習了。 題目描述 數獨是一種傳統益智遊戲,你需
百度地圖3.2教程(2)公交查詢
track error alt 3.1 內容 說了 ase 放大 gets 上一篇地址 百度地圖3.1教程—檢索功能演示 還記得兩天前 我在找公交接口,非常不幸。接口有些查不到,幾年的前的數據,哎 。算了唄,突然想起來了百度地圖有這個功能,結果去看了API,尼瑪這
紫書 習題3-2 分子量(字符串,常量數組)
strlen 1.0 進入 num 復位 %d ble i+1 對數 #include<stdio.h> #include<string.h> int main() { int t,i,num; char a[]={
初識vue 2.0(2):路由與組件
組件化 script -128 watch css image 暫時 效果 默認 1,在上一篇的創建工程中,使用的的模版 webpack-simple 只是創建了一個簡單的demo,並沒有組件和路由功能,此次采用了webpack模版,自動生成組件和路由。^_^ 在模版初始
mysql擴展性架構實踐N庫到2N 庫的擴容,2變4、4變8
str 新的 mage new 不能 可用性 可用 news 秒級 mysql擴展性架構實踐N庫到2N 庫的擴容,2變4、4變8 http://geek.csdn.net/news/detail/5207058同城 沈劍 http://www.99cankao.c
thinkphp3.2筆記(2)調試模式,配置項C,創建模塊, 四種URL模式
data 控制器 idt 默認 模式 com index.php 訪問 alt 一、調試模式 TP的調試模式其實就控制了TP關於配置信息以及函數的緩存功能 如果開啟了調試模式,每次訪問項目,Tp都會去加載最新的配置以及函數信息。 如果關閉了調試模式,當tp第一次訪問時會降配
小象學院 零基礎Python入門 案例一 匯率兌換2.0(2)
“”" 作者:樑斌 功能:匯率兌換 版本:2.0 日期:01/08/2017 新增功能:根據輸入判斷是人民幣還是美元,進行相應的轉換計算 “”" 匯率 USD_VS_RMB = 6.77 帶單位的貨幣輸入 currency_str_value = input(‘請輸入帶單位的
快速冪(2)
連結:https://ac.nowcoder.com/acm/contest/221/C來源:牛客網 令f(n)=2*f(n-1)+3*f(n-2)+n,f(1)=1,f(2)=2 令g(n)=g(n-1)+f(n)+n*n,g(1)=2 告訴你n,輸出g(n)的結果,結果對1e9+7取模