C语言学习笔记——数据类型深入了解

一、为什么需要数据类型

  • 数据在存放的时候,需要开辟内存空间,不同数据根据他所需要开辟的内存空间大小不一样,所以我们需要根据数据的大小,来选择合适的数据类型去存放数据,以达到节约内存空间,提高代码的效率。

二、如何查看数据大小

  • 在C语言中,使用 sizeof 运算符来查看所选的数据类型大小。
#include<stdio.h>

void main()
{
	printf("char_size =%d \n" , sizeof(char));
	printf("short_size =%d \n" , sizeof(short));
	printf("int_size =%d \n" , sizeof(int));
	printf("long_size =%d \n" , sizeof(long));	
	printf("float_size = %d \n" , sizeof(float));
	printf("double_size = %d \n" , sizeof(double));
	printf("long long_size = %d \n" , sizeof(long long));
	printf("long double_size = %d \n" , sizeof(long double));
}
  • 可以查看到如下结果:

可以看见linux c32位机中:

  • char 占1个字节
  • short 占2个字节
  • int 占4个字节
  • long 占4个字节
  • float 占4个字节
  • double 占8个字节
  • long long 占8个字节
  • long double 占12个字节

三、如何计算数据类型的数值范围

  • 首先要明白数据大小的转换方式:
  • 1 Byte(字节) = 8 bit (8位 二进制)
  1. 先分是无符号类型还是有符号(默认为有符号)
  2. 再看所用类型占用内存几个字节,转换成对应位数(多少位二进制),然后对应数据对应的最大值则为(无符号)2的对应位数次方-1 或者 (有符号)2的对应位数次方除以2再-1.

例如:

char 类型:

  1. 有符号:首先,char 类型占1个字节也就是8位 ,则 2^8 = 256,又因为是有符号的类型,所以要对半分,即正负数各占一半,所以char类型的最大数据大小为 2^8 除以2 -1(即256/2-1 = 127)
  2. 无符号:首先,unsigned char类型占1个字节也就是8位 , 着2^8 =256,又因为是无符号的类型,所以最小为0,最大数据大小为2^8-1(即255)

四、如何计算数据溢出后的数值

  • 首先要明白数据的正负数再内存中的存储方式:
  • 正数在内存中以原码的形式存储
  • 负数在内存中以补码的形式存储
  • 给出输入数值,求溢出后的显示的数值

例如:

  • 若char a = 310, 求溢出后显示的数值

首先将 310 转化为二进制数 --> 1 0011 0110 

又因为一个地址空间最大存放为八位 所以数据的最高位1溢出了 即 1 0011 0110

得到的0011 0110 为54(十进制)

所以溢出后显示的数值为54

  • 若 char a = 210,求溢出后显示的数值

首先要知道一个地址空间,最大存放8位数据,并且 char 类型占一个字节,也就是8位

首先将 210 转化为二进制数 --> 1101 0010 

因为默认为有符号类型最高位为符号位符号位为1,则表示为负数,负数在内存空间以补码形式存储。所以要求其补码

1101 0010 (原码) --> 1010 1101 (取反后得到反码) -->1010 1110 (反码+1,得到补码) , 于此同时,1010 1110为-46(十进制),所以溢出后,将a打印出来的数值为-46

  • 同理,也可以通过溢出后显示的数据,来算出输入的数值可以为多少

五、数据的大端序与小端序

  • 小端序:内存空间中,低位地址,存放数据的低有效位。
  • 大端序:内存空间中,低位地址,存放数据的高有效位。

大小端序主要影响的是不同计算机间的数据传输,同一台电脑内的数据传输没有影响

猜你喜欢

转载自blog.csdn.net/laifengyuan1/article/details/85792674