本文介绍C语言中整型变量在内存中的存储形式。主要分析二进制和十六进制的形式。

示例代码如下:

 
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int a
= -7; char string_2[35] = ""; char string_16[35] = ""; /* 打印出系统中int类型所占的字节数 */
printf("sizeof(a) is %d\n", sizeof(a)); printf("sizeof(int) is %d\n",
sizeof(int)); /* string_2中存储整型变量a的二进制表达形式 */ itoa(a, string_2, 2);
printf("integer a = %d\nbinary a = %s\n", a, string_2); printf("length of
string_2 a is %d.\n", strlen(string_2)); /* string_16中存储整型变量a的十六进制表达形式 */
itoa(a, string_16, 16); printf("integer a = %d\nHexadecimal a = %s\n", a,
string_16); printf("length of string_16 a is %d.\n", strlen(string_16));
system("pause"); return 0; }
上述代码的运行结果如下:

 

 
sizeof(a) is 4 sizeof(int) is 4 integer a = -7 binary a =
11111111111111111111111111111001 length of string_2 a is 32. integer a = -7
Hexadecimal a = fffffff9 length of string_16 a is 8.
从上述代码及其运行结果能够看出:

 

a)-7对应内存中的二进制值为11111111111111111111111111111001;对应的十六进制值为fffffff9,通过对二进制值进行求补码的操作:

1. 除符号位之外,进行取反操作:11111111111111111111111111110110;

2. 再加1操作:1111 1111 1111 1111 1111 1111 1111 0111,此值为原码,对应的数值是-7。

通过上述运算,证明了-7在内存中是以二进制补码的形式进行存储的。而十六进制仅仅是对二进制的补码进行了整合,同样是以补码的形式进行存储的。

b)-7的补码 1111 1111 1111 1111 1111 1111 1111 1001
中,前面28位都是符号位,只有最后4位是数值位。在进行运算时,把符号位标出来有利于更清晰地进行运算和理解原码与补码的关系。

技术
©2019-2020 Toolsou All rights reserved,
css中上下左右居中的几种实现方法[CISCN 2019 初赛]Love Mathc/c++语言实现登陆界面Unity3D 人称设置(第一人称视角、第三人称视角)Fastadmin框架自定义搜索操作流程2021最新Python自动化软件测试笔试题(含答案)黑客帝国装逼的代码雨mysql数据库设置字符集配置修改my.ini文件(windows)python之panda模块1Python学习笔记:基础+进阶10道练习题