欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

整形在内存中存储

程序员文章站 2022-04-22 12:08:09
...

一个变量的创建是要在内存中开辟空间的,空间的大小是根据不同的类型而决定的;

我们知道创建一个整形需要分配4个字节的空间,那它是如何让存储的呢?

通过学习,我们知道对于整形来说:数据存放内存中其实存放的是补码。

先来了解一下源码,反码,补码。

源码:直接将二进制按照正负数的形式翻译成二进制就可以。

反码:将源码符号位不变,其他位依次按位取反。

补码:反码+1。

看代码

#include<stdio>
int main()
{
    int a=10;
    int b=-20;
}

a的地址整形在内存中存储  10的十六进制为00 00 00 0a

b的地址整形在内存中存储    -20的十六进制为ff ff ff ec

我们发现了顺序有点不对劲。

这是为什么?

大小端介绍

什么是大端、小端?
大端模式:是指数据的低位保存在内存的高地址中,而数据中的高位保存在内存的低地址中。
小端模式:是指数据的低位保存在内存的低地址中,而数据中的高位保存在内存的高地址中。

所以,10、-20都是低地址放在数据的高位;所以为小端存储模式。

设计一个小程序判断当前机器的字节序。

#include<stdio.h>
int check_sys()
{
	int i = 1;//1为大端,0为小端
	return (*(char*)& i);
}
int main()
{	int a = 10;
	
	int ret = check_sys();
	if (ret == 1)
	{
		printf("小端");
	}
	else
	{
		printf("大端");
	}
	return 0;
}

练习:以下程序输出多少?

#include<stdio.h>
int main()
{
	int i = -20;
	unsigned int j = 10;
	printf("%d\n", i + j);
	return 0;
}


//10000000 00000000 00000000 00010100       -20的源码
//11111111 11111111 11111111 11101011       -20的反码
//11111111 11111111 11111111 11101100       -20的补码
//00000000 00000000 00000000 00001010       无符号10的源码,补码,反码
//11111111 11111111 11111111 11110110       -20+10的补码
//11111111 11111111 11111111 11110101       -20+10的反码

//10000000 00000000 00000000 00001010       -20+10的源码

整形在内存中存储



































相关标签: 大小端存储