明明 int / unsigned int 速度比 long / unsigned long 還快,為什麼要還要特別挑 long ?

 

這是近來網友問的,算是半常識。

一些 code 上會挑用 long / unsigned long,我想大多是在 bitwise 操作之類的,因 int / unsigned int 並沒保證它一定要是 32 bits,而 long / unsigned long 在規格書中已被保證,它一定會是大於等於 32 bits (我記得是保證最大值 至少是 2^31 - 1。另注意,我說的是 32 bits,不是 4 bytes,因 compiler 有權自定義 CHAR_BITS 為多少,它便代表了 1 byte = ???? bits )。

所以如果是要存 pointer address,也較建議用 unsigned long,但我印象中 C language 有一種額外的 data type 是給 pointer 用的。

同時建議,必須強烈相依於 int / long 有幾 bits 之資料型態,先行 typedef u32, i32 之類的東西出來,這些行為在單晶片開發時常見,如 C51 之類的,沒記錯的話,確實還有些單晶片之 compiler ,他們定義之 int 是 16 bits。

edisonx 發表在 痞客邦 留言(2) 人氣()