0
点赞
收藏
分享

微信扫一扫

C语言整型在内存中的存储

心如止水_c736 2023-01-28 阅读 167

前言

对于整型家族里的C语言内置数据结构:char,short,int long来说,都有无符号(unsigned)和有符号(signed)之分。整型家族在内存中都是以补码的形式存在.

一、整型家族

char :unsigned char,signed char

short :unsigned short,unsigned short

int :unsigned int,signed int 

long:unsigned long,signed long

二、什么是原码,反码,补码

整型家族在内存中都是以补码的形式存在,对于正数来说,它的原码,反码,补码相同,对于负数,用以下的例子说明

 int i=-2;

我们把i按照二进制序列写出来就是i的原码(把10进制数字写成32位的二进制数字),原码的首位叫做符号位,首位为0代码整数,首位为1代表负数,因为i是int类型,占四个字节,32个比特位,每一个比特位对应一个二进制数字0或者1,那么i的原码就是:

10000000 00000000 00000000 00000010

对原码除符号位以外的每一位按位取反的到反码,则i的反码为:

11111111 11111111 11111111 11111101

反码加一个二级制的1,得到补码,则i的补码为

11111111 11111111 11111111 11111110

三、存储

1.大端存储

数据的低位存储在内存的高地址中,数据的高位存储在内存的低地址中

2.小端存储

数据的低位存储在内存的低地址中,数据的高位存储在内存的高地址中

3.判断存储模式

int judge()
{
int i=1; //1的二进制补码00000000000000000000000000000001
// 16进制:0x 00000001
return *(char*)&i; //char*类型解引用时,i只能向上访问一个字节,
//俩个16进制位是1个字节,如果是大端存储,返回0,小端存储返回1
}
#include<stdio.h>
int main()
{
int ret=judge();
if(ret==1)
printf("小端“);
else
printf("大端”);
}





举报

相关推荐

0 条评论