整型之間的轉換

2021-09-01 15:02:15 字數 848 閱讀 3816

這裡說一下c的強型別轉換,也是c++的static_cast。

在小端的機器實驗了一下,

從位數多的型別(例如int64)轉到位數少的型別(例如int32)是直接擷取的,

這種情形是十分簡單明瞭的。

不過不同環境底層的策略可能不大一樣。

而反過來,從位數少的到位數多的,就稍微複雜一點,

在我的實驗環境中,例如從a到b,首先會判斷a是不是有符號的,

如果a是無符號的,那直接乙個記憶體拷貝完事,

否則會判斷是否為負,然後用0或1填充b中的高位,不管b是否有符號。

如果涉及加減乘除等複雜運算的都轉為有符號的,都轉為有符號的吧。

因為無符號遇到負數就悲劇了,用有符號的,在資料範圍內都不會出錯。

這個轉換情況繁多,有一點是不變的是:資料對應記憶體段的bit串是一樣的。

實驗**

#include #include using namespace std;

//cpu@e5520,g++4.1.2

int main()

執行結果:

t0 = -1

t1 = 4294967295

t2 = 4294967295

fffffe0ef02706be

f02706be

f02706be

y1 = 18446744073709551615 

好吧,強制轉換,去掉const修飾作用是令人一件不愉快的事情。

因為程式失去了原有的const語義,所以即使用了cast_const強制轉換,

也務必人肉保證對使用者態const是有效的。

java中整型之間的轉換

先看下面一段 byte a byte 0x80000001 int b int 0x80000001 system.out.println a system.out.println b a byte b system.out.println a 輸出結果為什麼呢?結果是 1 2147483647 1...

javascript 整型轉換

在判斷字串是否是數字值前,parseint 和parsefloat 都會仔細分析該字串。parseint 方法首先檢視位置0處的 字元,判斷它是否是個有效數字 如果不是,該方法將返回nan,不再繼續執行其他操作。但如果該字元是有效數字,該方法將檢視位置1處的字元,進行同樣的測試。這一過程將持續到發現...

網路通訊時整型資料與位元組之間的轉換

在進行socket通訊時,常常需要傳輸某個變數值的長度,比如乙個註冊包有名字,位址等資訊。在進行包的封裝定義時,一般是以namelength name addresslength address形式封裝。而無線網路傳輸是按位元組流傳輸的,這就要求對整形資料進行轉換。乙個位元組表示的整數最大範圍是2的...