整形在内存中存储

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

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



































阅读更多
文章标签: 大小端存储
个人分类: 周周记
上一篇调整数组使奇数全部都位于偶数前面。
下一篇打印杨辉三角
想对作者说点什么? 我来说一句

浮点数在内存中的存储格式.rar

2009年10月25日 56KB 下载

java+通讯录

2014年06月30日 21KB 下载

手机机身内存数据恢复

2013年04月28日 22.17MB 下载

Java Object原理图

2012年11月10日 282KB 下载

调用SD卡的工具类

2015年02月13日 6KB 下载

进行通信,共享内存方式

2014年06月03日 88KB 下载

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

关闭
关闭