VC中實現GCC的2個比較常用的位運算函式

2022-07-04 22:18:17 字數 897 閱讀 7710

在gcc中內嵌了兩個位運算的函式,但在vc中並沒有這兩個函式(有相似函式)。

//返回前導的0的個數。

int __builtin_clz (unsigned int x)

//返回後面的0個個數,和__builtin_clz相對。

int __builtin_ctz (unsigned int x)

這兩個函式在radix tree中直接計算索引,對效能有一定要求。

自己寫有些效率問題不是很理想,所以想確定vc2015 版本中是否有帶已經優化過的函式。

在網上兜了一圈,沒有找到類似vc實現的**。折騰了半天沒找到解決方案,後來到csdn上發了個貼解決問題。

_bitscanforward()

[ref]:

_bitscanreverse()

[ref]:

有64位版本的處理,需要處理一下就和gcc中得到相同結果

下面簡單實現這兩個函式。把這兩個測試**貼出來供遇到同樣問題的人提幫助。

輸出的值和gcc版本是一致的,可直接使用。

//#include "stdafx.h"

#include using namespace std;

__inline int __builtin_clz(int v)

}__inline int __builtin_ctz(int v)

}

int main()

printf("\n");

// ctz

printf("__builtin_ctz:\n");

for (int i = 0; i < 32; i++)

return 0;

}

VC中的常用的20個方法

一 開啟cd rom mcisendstring set cdaudio door open wait null,0,null 二 關閉cd rom mcisendstring set cdaudio door closed wait null,0,null 三 關閉計算機 osversioninf...

VC中的常用的20個方法

vc中的常用的20個方法 一 開啟cd rom mcisendstring set cdaudio door open wait null,0,null 二 關閉cd rom mcisendstring set cdaudio door closed wait null,0,null 三 關閉計算機...

gcc和vc編譯器在語法上的比較

1 宣告64位資料型別 gcc long long vc int64 2 switch語法中的case語句 gcc case 0 9 vc case 0 case1 3 暫存器變數的作用範圍 gcc 可以把register變數宣告為全域性或區域性的 vc 只能是區域性變數 4 有符號和無符號整形 g...