不用sizeof 求系統int型位數

2021-06-29 16:27:46 字數 1005 閱讀 5988

int byteofint()

return bits / 8;

}

這裡的乙個注意事項就是要使用無符號整型,因為如果有符號整型的話第一位是符號位,這就牽扯到包含有符號位的整型值的右移操作,有符號的數字右移是前面填充的是符號位。msdn這一句話說的比較到位:

* 右移運算子將導致 shift-expression 中的位模式向右移動 additive-expression 所指定的位數。 對於無符號數字,因移位運算而空出的位上將用零填充。 對於有符號數字,符號位用於填充空出的位。 也就是說,如果數字為正,則使用 0;如果數字為負,則使用 1。*

所以最後得到的bits會比實際上的位數少1位

利用整型陣列的兩個相鄰元素的位址之差來確定整型大小

#include 

int main(int argc, char *argv)

這段**在我的64位機器上是執行不了了,因為64位機器的指標長度在我的系統下是8位元組了,因此需要用long long型別來接收,為了防止不同編譯器在不同系統下對這個的限制,所以最好還是使用long long型別來處理:

int a[2];

unsigned

long

long add1 = (unsigned

long

long)&a[0];

unsigned

long

long add2 = (unsigned

long

long)&a[1];

printf("%llu", add1);

printf("%llu", add2);

return add2 - add1;

下面的巨集定義也可以實現相同的效果

c

#define mysizeof(value) ((char*)(&value+1) - (char*)(&value))

不用sizeof,測出int佔幾個幾節的方法。

根據目標機的不同,int佔的位元組是2或者是4.這裡我們不用sizeof,怎麼知道int在自己電腦上佔幾個位元組呢,我想到兩種方法。第一種 定義乙個陣列,int a 2 輸出a 1 和a 0 的位址,兩個差就是int佔的位元組數。兩個位址的差是4 第二種 定義乙個陣列,int a 4 然後用乙個ch...

不用現有方法,把string轉換成int型 C

今天聽朋友說到個面試題 不用現有方法,把string轉換成int型 就試著寫了一下,沒有考慮負數的情況,看的朋友可以自己試一下,也不難.view plain using system using system.collections.generic using system.text namespa...

求int型資料在記憶體中儲存時1的個數

1.求int型資料在記憶體中儲存時1的個數 輸入乙個int型資料,計算出該int型資料在記憶體中儲存時1的個數。我們很容易想到如下方法 include using namespace std int main cout 在對 進行測試時輸入負數無法得出結論,下面的方法將解決這一問題。include ...