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

 

posted @ 2022-05-19 09:11  ttweixiao9999  阅读(27)  评论(0编辑  收藏  举报