废话不多说直接上题目:
代码一:
#include<stdio.h>
int main()
{
char a = -1;
signed char b = -1;
unsigned char c = -1;
printf("a=%d b=%d c=%d", a, b, c);
return 0;
}
分析思路:
- 写出-1这个数的二进制补码
- 当类型为char的时候数据需要截断储存
- 当数据以整数类型打印的时候就要发生整型提升、
如下分析:
当把-1的补码放到char 类型的数据中存储是会发生截断如图所示:
所以a,b,c,中存放的都是11111111
但是当以整数的形式取出来的时候就不一样了,会发生整型提升。
所以%d打印a的值为-1.
所以%d打印b的值为-1.
所以%d打印c的值为255
程序运行结果如图所示:
代码二:
#include<stdio.h>
int main()
{
char a = -128;
printf("%u\n", a);
return 0;
}
思路分析:
- 写出-1这个数的二进制补码
- 当类型为char的时候数据需要截断储存
- 当数据以%u打印的时候就要发生整型提升
-128在char类型中的储存:
、
所以程序输出的结果为:4294967168
实际的结果:
结论:
负数的整形提升
所以整形提升的时候,高位补充符号位,即为1
正数的整形提升
所以整形提升的时候,高位补充符号位,即为0
无符号整形提升,高位补0
原码——>反码
符号位不变其他位按位取反
反码——>补码
反码+1
补码到原码方式一:
补码——>反码
补码-1
反码——>原码
符号位不变其他位按位取反文章来源:https://www.toymoban.com/news/detail-462814.html
方式二:
补码按位取反之后+1得到原码
以上就是数据储存的练习。文章来源地址https://www.toymoban.com/news/detail-462814.html
到了这里,关于【C语言】数据在内存中存储练习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!