c语言问题 比如 char a = 0xf7; 他在内存中的值是多少?

a的二进制:11110111
它的补码:10000111
那么在内存中它存的就是1000 0111
这种思路对吗?
还是说他在内存中就是1111 0111
为什么?

0xF7就是0xF7 二进制就是1111 0111 十进制就是247。对于char类型247当-9用而已,因为8位的时候247是-9的补码,而char刚好是8位。就是说对于char类型,-9的二进制表示是1111 0111。

printf会打印成0xFFFFFFF7因为printf用的不定长参数表,char会自动转换成int,int的-9是0xFFFFFFF7
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-02-01
补码一般用于带符号整数。char可看做无符号,故是1111 0111追问

恩 还有一个问题 我这里printf("%x",a); 输出的是0xfffffff7 而不是0xf7 也不是 0x0000 00f7这是为什么呢?

追答

用unsigned char

第2个回答  2015-02-01
对于明确使用0x这种16进制赋值的,内存中就是你设置的值。
相似回答