1. 程式人生 > >十六進位制相關(計算機儲存十六進位制負數、與十進位制轉換)

十六進位制相關(計算機儲存十六進位制負數、與十進位制轉換)


負數的十六進位制表示

剛開始沒多思考,不知道如何表示負數。

原碼  反碼   補碼 

在計算機中,資料是以補碼的形式儲存的。

正數的原碼,補碼,反碼都相同,都等於它本身

負數的補碼是:符號位為1,其餘各位求反,末位加1
反碼是:符號位為1,其餘各位求反,但末位不加1 

也就是說,反碼末位加上1就是補碼

-1
0000 0001   原碼
1111 1110    反碼  
1111 1111    補碼
0xff              十六進位制

 


-86
0101 0110    原碼
1010 1001    反碼
1010 1010    補碼
0xaa             十六進位制

/*

0xff aa        字
0xff ff ff aa    雙字
0xff ff ff ff ff ff ff aa 四字

*/


十進位制轉十六進位制 C

網上說的有一種非標準的庫函式可以使用,不是所有編譯器都支援。

 char *  itoa ( int value, char * str, int base );value是要轉化的數字,str是轉化後的字串儲存的位置,base是進位制數

其實用sprintf就能解決了

int sprintf( char *buffer, const char *format, [ argument] … );

例如:

char ch[2];

sprintf( ch, "%x", 100);