C语言整型在内存中的存储练习题详解4(Detailed explanation 4 of the practice questions of the storage in memory for c language )
C语言整型在内存中的存储 练习4 —— 说明以下代码输出结果
1 #define _CRT_SECURE_NO_WARNINGS 1
2 #include <stdio.h>
3
4 int main()
5 {
6 int i = -20;
7 unsigned int j = 10;
8 printf("%d\n", i + j);
9 // 按照补码的形式进行运算,最后格式化成为有符号整数
10 return 0;
11 }
对于这一道题,我们如果不知道有符号数和无符号数相加的结果会是怎样的,就可以写出变量在内存中补码的表示形式,然后再进行计算,最后再查看输出结果。
代码详解:
(1)先写出 int -20 的补码(注意,-20 是有符号整型负数)
-20 原码 - 10000000 00000000 00000000 00010100
-20 反码 - 11111111 11111111 11111111 11101011
-20 补码 - 11111111 11111111 11111111 11101100 - 0xFFFFFFEC
看看内存中 i 的值验证以上计算结果。
(2)再写出 unsigned int 10 的补码(注意,j 是无符号整型)
10 原码 - 00000000 00000000 00000000 00001010
10 反码 - 00000000 00000000 00000000 00001010
10 补码 - 00000000 00000000 00000000 00001010 - 0x0000000A
看看内存中 j 的值验证以上计算结果。
(3)把两数的补码相加(在内存中的两数的相加即补码的相加):
相加后的补码 - 11111111 11111111 11111111 11110110
相加后的反码 - 11111111 11111111 11111111 11110101
相加后的原码 - 10000000 00000000 00000000 00001010
(4)把相加后的原码转换成十进制可得到为:-10
(5)查看代码运行结果:
在掌握好了C语言中数据在内存中储存的知识点后,做这些题目就会游刃有余了~
以上知识点来自:https://www.bilibili.com/video/BV1q54y1q79w?p=30&spm_id_from=pageDriver