程式設計師不得不知的20個位運算技巧
雖然寫的是原創,實際上是轉載,優秀的博文,我總想不讓他被埋沒。博文最後有轉載地址
一提起位運算,人們往往想到它的高效性,無論是嵌入式程式設計還是優化系統的核心程式碼,適當的運用位運算總是一種迷人的手段,或者當您求職的時候,在程式碼中寫入適當的位運算也會讓您的程式增加一絲亮點,最初當我讀《程式設計之美》求“1的數目”時,我才開始覺得位運算是如此之美,後來讀到 《Hacker's Delight》,感慨到Henry
S.Warren把位運算運用的如此神出鬼沒,很多程式都十分精妙,我覺得在一個普通的程式中大量運用這樣的程式碼的人簡直是瘋了!但掌握簡單的位運算技巧還是必要的,所以今天寫這篇博文把我積累的一些位運算技巧分享給大家,這些技巧不會是如求“1的數目”的技巧,是最基本的一行位運算技巧
1.獲得int型最大值
- int getMaxInt(){
- return (1 << 31) - 1;//2147483647, 由於優先順序關係,括號不可省略
- }
另一種寫法
- int getMaxInt(){
- return ~(1 << 31);//2147483647
- }
另一種寫法
- int getMaxInt(){//有些編譯器不適用
-
return
- }
C語言中不知道int佔幾個位元組時候
- int getMaxInt(){
- return ((unsigned int) - 1) >> 1;//2147483647
- }
2.獲得int型最小值
- int getMinInt(){
- return 1 << 31;//-2147483648
- }
另一種寫法
- int getMinInt(){//有些編譯器不適用
-
return 1 << -1;
- }
3.獲得long型別的最大值
C語言版
- long getMaxLong(){
- return ((unsigned long) - 1) >> 1;//2147483647
- }
JAVA版
- long getMaxLong(){
- return ((long)1 << 127) - 1;//9223372036854775807
- }
4.乘以2運算
- int mulTwo(int n){//計算n*2
- return n << 1;
- }
5.除以2運算
- int divTwo(int n){//負奇數的運算不可用
- return n >> 1;//除以2
- }
6.乘以2的m次方
- int mulTwoPower(int n,int m){//計算n*(2^m)
- return n << m;
- }
7.除以2的m次方
- int divTwoPower(int n,int m){//計算n/(2^m)
- return n >> m;
- }
8.判斷一個數的奇偶性
- boolean isOddNumber(int n){
- return (n & 1) == 1;
- }
9.不用臨時變數交換兩個數(面試常考)
C語言版
- void swap(int *a,int *b){
- (*a) ^= (*b) ^= (*a) ^= (*b);
- }
通用版(一些語言中得分開寫)
- a ^= b;
- b ^= a;
- a ^= b;
10.取絕對值(某些機器上,效率比n>0 ? n:-n 高)
- int abs(int n){
- return (n ^ (n >> 31)) - (n >> 31);
- /* n>>31 取得n的符號,若n為正數,n>>31等於0,若n為負數,n>>31等於-1
- 若n為正數 n^0=0,數不變,若n為負數有n^-1 需要計算n和-1的補碼,然後進行異或運算,
- 結果n變號並且為n的絕對值減1,再減去-1就是絕對值 */
- }
11.取兩個數的最大值(某些機器上,效率比a>b ? a:b高)
通用版
- int max(int a,int b){
- return b & ((a-b) >> 31) | a & (~(a-b) >> 31);
- /*如果a>=b,(a-b)>>31為0,否則為-1*/
- }
C語言版
- int max(int x,int y){
- return x ^ ((x ^ y) & -(x < y));
- /*如果x<y x<y返回1,否則返回0,
- 、 與0做與運算結果為0,與-1做與運算結果不變*/
- }
12.取兩個數的最小值(某些機器上,效率比a>b ? b:a高)
通用版
- int min(int a,int b){
- return a & ((a-b) >> 31) | b & (~(a-b) >> 31);
- /*如果a>=b,(a-b)>>31為0,否則為-1*/
- }
C語言版
- int min(int x,int y){
- return y ^ ((x ^ y) & -(x < y));
- /*如果x<y x<y返回1,否則返回0,
- 與0做與運算結果為0,與-1做與運算結果不變*/
- }
13.判斷符號是否相同
- boolean isSameSign(int x, int y){ //有0的情況例外
- return (x ^ y) >= 0; // true 表示 x和y有相同的符號, false表示x,y有相反的符號。
- }
14.計算2的n次方
-
相關推薦
程式設計師不得不知的20個位運算技巧
雖然寫的是原創,實際上是轉載,優秀的博文,我總想不讓他被埋沒。博文最後有轉載地址 一提起位運算,人們往往想到它的高效性,無論是嵌入式程式設計還是優化系統的核心程式碼,適當的運用位運算總
優秀程式設計師不得不知道的20個位運算技巧
原文地址:http://blog.csdn.net/tender001/article/details/8542975 一提起位運算,人們往往想到它的高效性,無論是嵌入式程式設計還是優化系統的核心程式碼,適當的運用位運算總是一種迷人的手段,或者當您求職的時候,在程式碼中
【轉】優秀程式設計師不得不知道的20個位運算技巧
———————————————————————————————————————————— 一提起位運算,人們往往想到它的高效性,無論是嵌入式程式設計還是優化系統的核心程式碼,適當的運用位運算總是一種迷人的手段,或者當您求職的時候,在程式碼中寫入適當的位運算
程式設計師不得不知的Linux常用的命令
程式設計師不得不知的Linux常用的命令 1.查詢檔案 find / -name filename.txt 根據名稱查詢、目錄下的filename.txt檔案。 find .-name “*.xml” 遞迴查詢所有的xml檔案 2.檢視一個程式是否允許 ps -ef|grep tom
不得不知道的20個位運算技巧
================================================================================================== 作者:nash_ 歡迎轉載,與人分享是進步的源泉! =====================
C/C++的20個位運算技巧
n) iss 奇偶性 tools light ofo 一起 comment view 一提起位運算,人們往往想到它的高效性,無論是嵌入式編程還是優化系統的核心代碼,適當的運用位運算總是一種迷人的手段,或者當您求職的時候,在代碼中寫入適當的位運算也會讓您的程序增加一絲亮點,最
某裡P7程式設計師竟不知Nio、堆排序?網友:這是怎麼進大廠的?
某裡P7一直是很多程式設計師為之奮鬥的目標,因為那代表著高薪高技術,如果能夠在公司內部晉升到P7或者社招到P7的崗位,那樣不僅代表著自己邁入了行業精英的行列,還代表著自己的技術可到了行業的認可。 但是近日竟然有網友發帖稱:面試了一個阿里的P7,還在美特斯邦威做資深架構師,可是竟然堆排序、紅
Java程式設計師不可不知的幾個網站,你去過幾個?
看到網上IT友人積累的網址,非常不錯,不少我也知道,非常值得去學習,特此也借他人幫助記錄一下!!非常感謝!! 轉自:http://ibeginner.sinaapp.com/index.php?m=Home&c=Index&a=detail&i
es6常用的語法,和不得不知的es6小技巧
1. 強制要求引數 ES6提供了預設引數值機制,允許你為引數設定預設值,防止在函式被呼叫時沒有傳入這些引數。 在下面的例子中,我們寫了一個required()函式作為引數a和b的預設值。這意味著如果a或b其中有一個引數沒有在呼叫時傳值,會預設required()函式,然後丟擲錯誤。 `co
80%的程式設計師都不瞭解的除錯技巧
本文轉載自公眾號 Tomcat那些事兒 程式設計師的工作內容,除了大部分時間寫程式碼之外,因為有不少的時間是用在除錯程式碼上。甚至說不是在除錯程式碼,就是即將除錯程式碼。 :) 今天我們來談談除錯程式碼的一些技巧,在使用IDE提供的debugger時一些
據說做好這幾道考題的python程式設計師年薪超20萬
Python測試題: 學習Python中有不明白推薦加入交流裙 號:735934841
那些年啊,那些事——一個程式設計師的奮鬥史 ——20
因為產品已經要接近批量產,基本上軟體方面也不會有很大的變動,只要之前的程式不出現致命的BUG,那麼就可以宣告完成。只不過這種沒有經過嚴格測試的程式,僅僅是程式設計師自己覺得沒問題的流程,完全沒有BUG的可能性又是幾何呢?只不過作為程式設計師,除非是專業測試的,估計沒
PHP程式設計師不可不知的十大專案
PHP的流行,絕不是偶然的,各種開源輔助專案起到了不小的作用。來自這裡的一個好帖子收集了不少這樣的小專案,轉貼一下備忘。1. 傳送郵件 phpmailer2. 管理使用者 Php user class3. 抓取RSS摘要 Magpie RSS4. 獲取訪問者的地理資訊 M
JavaScript程式設計師必備的5個debug技巧
我一直使用,一般來說都是比較順利,但有時候,你會發現需要更好的方法。下面幾個JavaScript技巧相信你一定會覺得十分有用: 1. debugger; 我以前也說過,你可以在JavaScript程式碼中加入一句debugger;來手工造成一個斷點效果。 需要帶有條
程式設計師使用Node的十個技巧
從問世到現在將近20年,JavaScript一直缺乏其它有吸引力的程式語言,比如Python和Ruby,的很多優點:命令列介面,REPL,包管理器,以及組織良好的開源社群。感謝Node.js和npm,現如今的JavaScript鳥槍換炮了。Web開發者有了強大的新工具,接
Android 解決輸入法鍵盤遮蓋佈局問題,程式設計師不得不用的方案,快捷!
/** * @param root 最外層佈局,需要調整的佈局 * @param scrollToView 被鍵盤遮擋的scrollToView,滾動root,使scrollToView在root可視區域的底部 */ pri
程式設計師特有的20個習慣,你有多少個?快來測測
早上按時到單位,然後開始一天的工作,有專案的時候,一般會有朝會,就是說說你現在的工作進度到哪裡了。但是通俗的講就是敲程式碼,看別人寫程式碼,改別人寫的程式碼。過著別人眼中邋遢的生活,拿著高薪的工資,用自己最獨特的表白方式追著自己的女神。。。每天過著簡單而又單調的小日子。漸漸的,他們在生活中也養成了一
Java程式設計師必讀的十本書程式設計技巧(轉)
Kevin Taylor對Java書籍的推薦,關於併發的書籍我在書店裡好像沒看到過。在Web方面只有Java Servlet Programming登場,JSP等並沒有提到。開發工具方面也沒有一本,這是我覺得比較可惜的。1. 《Thinking in Java》(Java程式
Java程式設計師必讀的十本書程式設計技巧
Kevin Taylor對Java書籍的推薦,關於併發的書籍我在書店裡好像沒看到過。在Web方面只有Java Servlet Programming登場,JSP等並沒有提到。開發工具方面也沒有一本,這是我覺得比較可惜的。 1. 《Thinking in Java》(Java程式設計思想) 作者:Bruce
技術好卻進不了大公司?程式設計師面試的幾個小技巧請收好
有很多程式設計師,專業技術挺好,專案經驗充足,簡歷上金碧輝煌,也面試了很多國內大廠,但就是沒有一家能成功的。處境可以說是相當尷尬。 大家都知道程式設計師本身就是要吃年輕飯,不僅是技術活,也是體力活。早點跳槽,早點漲薪,就顯得格外的重要了。 那麼我就給大家分享一下程式設計師面試的幾個小技巧: 1.面試準備要