[爆卦]unsigned signed比較是什麼?優點缺點精華區懶人包

為什麼這篇unsigned signed比較鄉民發文收入到精華區:因為在unsigned signed比較這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者hichcock (快樂一整年 ^^~~~)看板C_and_CPP標題Re: [問題] int...


※ 引述《hichcock (快樂一整年 ^^~~~)》之銘言:
: 前一陣子正好在寫一個高運算量的演算法
: 裡面大部分需要用到的是正整數
: 所以我就全部使用 UINT 來宣告
: 當時的想法是 UINT 應該比 int 的運算來的快
: 因為不需要辨識正負數的問題
: 不過最後當整個演算法完成後
: 我一時興起將全部的 UINT 又改成 int
: 卻發現效率比原本的快上 1 倍 !?
: 這點我無法理解,不知道有人知道原因嗎?
: 我使用的是 VC 6.0

下面是一個簡單的範例:

1. 使用 UINT 運算

#define Number 9999

UINT *Data = new UINT[Number];
UINT i, j, k;
double Q2 = sqrt(2);
UINT Tm = GetTickCount();
for(i = 0;i < Number;i++)
{
k = 0;
for(j = 0;j < Number;j++)
{
k = k + UINT(Q2*i);
}
Data[i] = k;
}
TRACE("UINT : %d\n", GetTickCount()-Tm);
delete Data;

2. 使用 int 運算

#define Number 9999

int *Data = new int[Number];
int i, j, k;
double Q2 = sqrt(2);
UINT Tm = GetTickCount();
for(i = 0;i < Number;i++)
{
k = 0;
for(j = 0;j < Number;j++)
{
k = k + int(Q2*i);
}
Data[i] = k;
}
TRACE("int : %d\n", GetTickCount()-Tm);
delete Data;

這兩段程式在我的電腦跑就差了快 5 秒了

我問過一些較資深的同事,似乎沒有人確定原因

後來我又實驗了一下,似乎是在強制轉型那邊的差異

double -> int 比較快

double -> UINT 比較慢

有強者可以解說一下嗎

--
每一個偉大的故事,都不會在一瞬間就發生,它總是透過一個個小小的奇蹟累積而來

至於今晚的比賽究竟誰會獲勝,事實上每一場比賽都一樣

如果今晚你有非贏不可的理由,那你就.....一定會贏

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.250.142.11
lockcole:如果code改成不用轉型,速度就會一樣嗎? 03/02 17:25
zlw:http://tinyurl.com/ap9a57 代碼優化-之-優化浮點數取整 03/02 17:47
zlw:這篇可能有關,不過看不懂 03/02 17:48
chrisdar:double->signed 有號轉有號 double->unsigned 有號轉無號 03/02 18:05
chrisdar:應該是 有號互轉比較快 與 unsigned/signed int 沒關係 03/02 18:06
ledia:disassembly 看起來是下面用了 SSE inst. 所以比較快 03/02 18:20
VictorTom:同樓上, 看起來不用小弟雞婆貼disasm code了....:) 03/02 18:22
VictorTom:話說, 一時找不到怎麼把ins set最佳化給關掉了Orz 03/02 18:24
tinlans:我用 g++ -O3 編,連 0.01 秒都沒差。 03/02 18:40
k2450:還蠻好奇是都比VC快還是都比VC慢 03/02 21:36

你可能也想看看

搜尋相關網站