关于有符号,无符号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------------这样理解不知道有问题没?望大家指正