進製之間的相互轉化

2021-06-02 22:25:57 字數 1866 閱讀 6766

由乙個問題想到的!

這個問題是 在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的整數倍,則在最左側補零,對小數點右側 即小數部分 應...