关于有符号,无符号char与int其间的转换
关于有符号,无符号char与int之间的转换
#include <stdio.h> void main() { int a = (char)0x86; int b = (unsigned char)0x86; printf("char(0x86) to int of value=%d\n",a); printf("unsigned char(0x86) to int of value=%d\n",b); }
输出结果:
char(0x86) to int of value=-122 unsigned char(0x86) to int of value=134 Press any key to continue
int a=(char)0x86;
在内存中是用补码表示:1000 0110,
这个是直接作为补码赋给a的,通过符号位扩展那么a就是1111 1111 1111 1111 1000 0110,转换成原码就是
1000 0000 0000 0000 0111 1010, 即十进制的-122
int b = (unsigned char)0x86;
在内存中是用原码表示:1000 0110,
这个是直接作为原码赋给b的,通过符号位扩展那么b就是0000 0000 0000 0000 1000 0110,即十进制的134
注意: 补码补齐的时候是用1,原码是用0------------这样理解不知道有问题没?望大家指正