十六进制相关(计算机存储十六进制负数、与十进制转换)


负数的十六进制表示

刚开始没多思考,不知道如何表示负数。

原码  反码   补码 

在计算机中,数据是以补码的形式存储的。

正数的原码,补码,反码都相同,都等于它本身

负数的补码是:符号位为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);

猜你喜欢

转载自blog.csdn.net/huanghxyz/article/details/84397531