问题
1
#include <stdio.h>
int main()
{
char ch = 0x81; // 补码--1000 0001
printf("%d\n",ch); // 1111 1110 --> 1111 1111 -127 方法有误
/*
将8位补码转为32位补码,再转为32位原码进行打印
8位补码-->32补码:
8位补码-->8位原码-->32位原码-->32补码-->32原码
8位原码 1111 1111
32位原码 符号位不变 1000 0000 0000 0000 0000 0000 0111 1111 -127
32位反码 1111 1111 1111 1111 1111 1111 100000000
3位补码 1111 1111 1111 1111 1111 1111 100000001 无符号打印打印的是这个数
8位补码转32位补码:8位补码最高位为1,扩展的时候一直补1,最高位为0,扩展的时候一直补0
*/
printf("%u\n",ch); //4294967169
system("pause");
return 0;
}
- %d 32位有符号十进制
- %u 32位无符号十进制
- %x 32位十六进制