char强制类型转换为int
百度百科查char类型是unsigned的1 #include <stdio.h>
2
3 int main()
4 {
5 char a=0xcd;
6 int b;
7 b=(int)a;
8 printf("%x\n",b);
9 return 0;
10 }
为什么结果是ffffffcd而不是cd(前面是0)
这种情况怎么补位,本人不清楚,本人是按位运算规则补位的
位运算时右移,空位补符号位,既然char是无符号的,为什么不是前面不是补的0而是1
(编译环境:centos 6.4 GCC编译器)
char 是signed的,不信去搜搜unsigned char,看看有没有这个。
int是4个字节,看看0xcd吧,转换成二进制是11001101,那么十进制就是负数(char是一个字节,最高位为1,十进制就是负数啦)。
既然是负数,那么转成int(4个字节的整数)还是负数,很明显高位补1,(不明白高位补一,想想汇编里的movsx带符号的扩展传送。)结果就是0xffffffcd、
把他转化成十进制和0xcd结果是一样的(注意两个数据的字节不一样,就是最高位不一样) 这个程序没有问题,也符合补码规则,你可以把0xcd用计算器转换下就知道了【-51】(用字节表示),
如果用字节表示就是【11001101】,这样解释你能明白吗?
还有你可以这样(printf("%d", b);)就知道结果了!! 学习了,定下
页:
[1]