這裡說一下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的...