整形在内存中存储

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

我们知道创建一个整形需要分配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为xiao
	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的源码



































阅读更多
文章标签: 大小端存储
个人分类: 周周记
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

整形在内存中存储

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭