優秀程式設計師不得不知道的20個位運算技巧

2022-09-16 08:33:14 字數 3623 閱讀 4760

一提起位運算,人們往往想到它的高效性,無論是嵌入式程式設計還是優化系統的核心**,適當的運用位運算總是一種迷人的手段,或者當您求職的時候,在**中寫入適當的位運算也會讓您的程式增加一絲亮點,最初當我讀《程式設計之美》求「1的數目」時,我才開始覺得位運算是如此之美,後來讀到 《hacker's delight》,感慨到henry s.warren把位運算運用的如此神出鬼沒,很多程式都十分精妙,我覺得在乙個普通的程式中大量運用這樣的**的人簡直是瘋了!但掌握簡單的位運算技巧還是必要的,所以今天寫這篇博文把我積累的一些位運算技巧分享給大家,這些技巧不會是如求「1的數目」的技巧,是最基本的一行位運算技巧

welcome to my bittricks

[cpp]view plain

copy

intgetmaxint()  

[cpp]view plain

copy

intgetmaxint()  

[cpp]view plain

copy

intgetmaxint()  

[j**a]view plain

copy

intgetmaxint()  

[cpp]view plain

copy

intgetminint()  

[cpp]view plain

copy

intgetminint()  

[cpp]view plain

copy

long

getmaxlong()  

[j**a]view plain

copy

long

getmaxlong()  

獲得long最小值,和其他型別的最大值,最小值同理.

[cpp]view plain

copy

intmultwo(

intn)  

[cpp]view plain

copy

intdivtwo(

intn)  

[cpp]view plain

copy

intmultwopower(

intn,

intm)  

[cpp]view plain

copy

intdivtwopower(

intn,

intm)  

[j**a]view plain

copy

boolean

isoddnumber(

intn)  

[cpp]view plain

copy

void

swap(

int*a,

int*b)  

[j**a]view plain

copy

a ^= b;  

b ^= a;  

a ^= b;  

[cpp]view plain

copy

intabs(

intn)  

[cpp]view plain

copy

intmax(

inta,

intb)  

[cpp]view plain

copy

intmax(

intx,

inty)  

[cpp]view plain

copy

intmin(

inta,

intb)  

[cpp]view plain

copy

intmin(

intx,

inty)  

[j**a]view plain

copy

boolean

issamesign(

intx, 

inty)  

[cpp]view plain

copy

intgetfactorialoftwo(

intn)  

[j**a]view plain

copy

boolean

isfactorialoftwo(

intn)  

[j**a]view plain

copy

intquyu(

intm,

intn)  

[j**a]view plain

copy

intget**erage(

intx, 

inty)   

下面是三個最基本對二進位制位的操作

[j**a]view plain

copy

intgetbit(

intn, 

intm)  

[j**a]view plain

copy

intsetbittoone(

intn, 

intm)  

[j**a]view plain

copy

intsetbittozero(

intn, 

intm)  

[cpp]view plain

copy

-~n  

[cpp]view plain

copy

~-n  

[j**a]view plain

copy

~n + 

1;  

[j**a]view plain

copy

(n ^ -

1) + 

1;  

[cpp]view plain

copy

x = a ^ b ^ x;  

[cpp]view plain

copy

return

!!n - (((unsigned)n>>31)<<1);  

不得不知道的補碼知識

無論什麼程式語言,其 最終都會被編譯解釋成計算機可讀取和執行的二進位制資料。其中,數字在二進位制資料中可劃分成原碼 補碼和反碼。原碼 數值前面增了一位符號位 例如 10 和 10 的二進位制表示如下 10 的原碼 0000 1010 10 的原碼 1000 1010其中,最高位表示符號位,0 表示正...

程式猿不得不知道的業內「黑話」

程式猿的隊伍越來越龐大了,這裡整理了一些開發周邊的各個渠道的 黑話 趕快瞅瞅吧,別下次聽到時還是一頭霧水了!程式猿 沒必要做那麼複雜 複雜的我不會 外面大家都是這麼做的 我直接複製的 你這個需求不清晰 我不想做 目前技術實現不了 我不想做 那個 有句話 不知 專案要延期了 你告訴我輸什麼我自己來 你...

程式猿不得不知道的業內「黑話」

程式猿的隊伍越來越龐大了,這裡整理了一些開發周邊的各個渠道的 黑話 趕快瞅瞅吧,別下次聽到時還是一頭霧水了!程式猿 沒必要做那麼複雜 複雜的我不會 外面大家都是這麼做的 我直接複製的 你這個需求不清晰 我不想做 目前技術實現不了 我不想做 那個 有句話 不知 專案要延期了 你告訴我輸什麼我自己來 你...