C中sizeof讨论
void main(){
char a=-10;
printf("%0x",a);
printf("%d",sizeof(a));
}
请问这段代码的运行结果怎么是
ff ff ff f6 和 1
char类型相当于一个占有一个字节的小整型。
而上面把a赋值为-10 ,这个-10表示的是一个数值,而不是一个字符。
其中-10的16进制表示就是fffffff6
当你打印的时候就会打印这个ffffff6
另外一个就是说char类型占有的字节大小,显然是1个字节 void main()
{
char a=-10;
printf("%0x",a);
printf("%d",sizeof(a));
}
请问这段代码的运行结果怎么是
ff ff ff f6 和 1
第一行打印a a是-10 整数型的-10 在内存中的表示方法涉及到二进制
先把10看成正数 二进制的10是 1010 在32位系统就是在前面补28个0就是
00000000 00000000 00000000 00001010
第一位是符号位0表示正数 1表示负数
那么-10就应该是
10000000 00000000 00000000 00001010
然后除了第一位的符号位以外取反就是0变1 1变0 之后就变成了
11111111 11111111 11111111 11110101
取反之后再加1就变成了
11111111 11111111 11111111 11110110
对应16进制就是
ff ff ff f6
最后给你摘抄一段文字
原码表示法规定:用符号位和数值表示带符号数,正数的符号位用“0”表示,负数的符号位用“1”表示,数值部分用二进制形式表示。
反码表示法规定:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反。
补码表示法规定:正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1.
还有
printf("%d",sizeof(a));
a是char类型 就是占用1个字节
所以你sizeof算出来的就是1
如果你用int a=-10,那么你在32位系统上面用sizeof(a),结果一定是4
学习 为什么不用-10的源码表示而是用补码表示呢?
页:
[1]