由乙個問題想到的!
這個問題是 在windows計算器裡,用programmer方式,
選擇dword即32位編碼,然後切換到16進製制,輸入80800006,
再轉化成十進位制,會得到乙個負數-2139095034
在c#裡面80800006是乙個uint變數,如何把它變成乙個int的負數?
答案:
uint aa = 0x80800006;
int bb=unchecked((int)aa);
unchecked操作符用於整型算術運算時控制當前環境中的溢位檢查
意思就是無論運算是否是常量表示式,都沒有編譯錯誤或是執行時異常發生,只是返回值被截掉不符合目標型別的高位。
如果是qword怎麼辦?會顯示2155872262
用int64 就可以了。
uint aa = 0x80800006;
int64 cc = (int64)aa;
題外說一下,其實int int16 int32 int64的關係就是
int 表示整型,
後面的 資料表示這個整型的長度,
比如 int32 表示 32位整型, 4位元組, 是目前使用最多的
說的更簡單一點就是
int16=short;比如寫int32=int;
int64=long;
uint aa = 0x80800006;
int bb = unchecked((int)aa);
int64 cc = (int64)aa;
int32 dd=(int32)aa;
int16 ee=(int16)aa;
bb = cc;
bb是int,cc是int64 這樣寫就有編譯錯誤:error
1cannot implicitly convert type
'long' to 'int'. an explicit conversion exists (are you missing a cast?)
擴充套件(其他寫法):
string hexstring = "80800006";
int result = convert.toint32(hexstring, 16);
long result1 = convert.touint32(hexstring, 16);
int test = -2139095034;
string tesstring = convert.tostring(test, 16);
//十進位制轉二進位制
console.writeline(convert.tostring(69, 2));
//十進位制轉八進位制
console.writeline(convert.tostring(69, 8));
//十進位制轉十六進製制
console.writeline(convert.tostring(69, 16));
//二進位制轉十進位制
console.writeline(convert.toint32(「100111101″, 2));
//八進位制轉十進位制
console.writeline(convert.toint32(「76″, 8));
//十六進製制轉十進位制
console.writeline(convert.toint32(「ff」, 16));
即十進位制的數用int32表示,而二進位制,八進位制,十六進製制的數都用string表示
java各種進製之間的相互轉化
system.out.println 把2,8,16的數字的字串形式,轉化為10進製 system.out.println integer.parseint 10 10 system.out.println integer.parseint 10 2 system.out.println integ...
進製的相互轉化
我們常用的進製包括 二進位制 八進位制 十進位制與十六進製制,它們之間區別在於數運算時是逢幾進一位。十進位制轉二進位制 方法為 十進位制數除2取餘法,即十進位制數除2,餘數為權位上的數,得到的商值繼續除2,依此步驟繼續向下運算直到商為0為止。二進位制轉十進位制 方法為 把二進位制數按權展開 相加即得...
進製間的相互轉化
原文 進製間的相互轉化 進製間的轉換如下圖所示 由上圖可知,進製間共有12種轉換。下面將逐一介紹這12種轉換方法 1 二進位制轉化為八進位制 原理 1 1位八進位制數可以用3位二進位制數碼表示 2 以小數點為邊界 若小數點左側 即整數部分 不是3的整數倍,則在最左側補零,對小數點右側 即小數部分 應...