数据在内存中的存储之整型

  • Post author:
  • Post category:其他


数据的基本类型:

整型             分为无符号unsigned和sign

char 存储的是字符的ASCII码值,也是整数

short

int

long

long long

浮点型

float

double

构造类型

struct 结构体类型

数组

enum 枚举类型

union 枚举联合体类型

指针类型

空类型

void   用在函数的返回类型 ,指针

这些类型的意义就是不同的类型开辟的不同的空间大小,大小决定了使用范围。

整型在内存中的存储,其地址是倒着存储的

数据在内存中以二进制的形式存储

对于整数来说:

整数有三种表示形式:原码,反码,补码

其中,正整数的原码和反码还有补码相同 ,负整数的原码,反码,补码是要进行计算的

例如:-10


//


原码10000000000000000000000000001010


//


反码11111111111111111111111111110101


//


补码11111111111111111111111111110110


//


按照数据的数值直接写出的二进制序列就是原码


//


原码的符号位不变,其他位按位取反,得到的就是反码


//


反码+1,得到的就是补码



整数在内存中存储的是



补码

为什么内存中存储的补码呢?

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号和数值域统一处理;同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码和原码相互转换,其运算过程是相同的,不需要额外的硬件电路


有负数时要用补码相加

大小端存储

大端字节序:

把数据的低位字节的内容存放在高地址出,高字节序的内容存放在低地址处

小端字节:

把数据的低位字节序的内容存放在低地址处,高位字节序的内容存放在高地址处

低地址                                                                                                                               高地址

小端存储                        01 00 00 00

小端存储                     00 00 00 01

现在设计一个程序来判断当前机器的字节序

#include<stdio.h>
int main()
{
	int a = 1;
	char* p = (char*)&a; //将整型强制转化为字符型 ,char每次只访问一个字节     
	if (*p == 1)
	{
		printf("小端\n");    
	}
	else(printf("大端\nn");
}

整型变量

sign



unsigned

的区别

C语言中将基本数据类型划分为signed(有符号)和unsigned(无符号)两大类,初始化变量int a=-3等价于signed int a=-3;关键字signed可以省略,因为C语言默认就是有符号类型的

#include<stdio.h>
int main()
{
	unsigned int i;
	//i是无符号数,任何情况下都大于0
	//所以程序死循环
	for (i = 9; i >= 0; i++)
	{
		printf("%u\n", i);
	}
	return 0;
}

#include<stdio.h>
int main()
{
	char a[1000];  //巧记口诀:超出范围的数据如果是正数,减去256
	int i;         //否则加上256
	for (i = 0; i < 1000; i++)
	{
		a[i] = -1 - i;
	}
	//128+127=255
	//-1 -2 -3……-127 -128 -127 126 125……3 2 1 0 -1 -2
	printf("%d", strlen(a));
	return 0;
}

char 类型存储数据的大小是八个字节,数值大小是-128~127

unsigned char大小是0-255;

#include<stdio.h>
int main()
{ 
	unsigned char i = 0;
	int count = 0;
	for (i = 0; i <= 255; i++)  //i永远小于255
	{
		printf("hello\n");
	}
	return 0;
}



版权声明:本文为m0_64247174原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。