[C语言]浅谈数据类型

你是否还在纠结为啥C语言会有这么多的数据类型?

我的理解就是既省时间又省空间

在讲数据类型之前,我们先来看一下计算机里面最小的储存单位是比特,一个比特可以存一个0或1。

计算机是基于二进制的,这是因为人们很容易使用硬件上来控制高低电压(比如用电源和开关,通过开关的状态【开/关】就能控制这条线路上的电压)

如果我们要用计算机去储存一些信息,我们就只能用0和1来表示一些信息。这个时候我们会怎么办呢。

其实我们可以通过制定一些规则来让计算机识别我们输入的信息,比如设定一个具体的数,每次计算机得知这是一些信息的时候,就会去读取这个数那么多的比特来表示信息

举个例子:比如我规定每次读取10位,那么每次计算机识别到具体的数据储存地方就会10个比特读取

 0101010100

我们就可以用0101010100来表示这一些信息也就是十进制的154

看到这里,你就会想,对啊,这不就可以表示信息了么,那为什么还要规定这么多的数据类型。

你想,
如果我如果储存的信息只用1个比特就能储存,那我为什么还要读取10位然后在取第1位,我可以直接让计算机读取1个比特来表示这个信息。

而计算机读取是要时间的,所以如果我们规定适当的读取长度,就可以节省时间(读取)和空间(储存)

因此,我们为了方便着想就规定C语言有如下几种数据类型:

C语言中的整数(char,short,int,long)

char型

  • 有符号signed范围:-2^7 ~ 2^7-1 即:-128 ~ 127
  • 无符号unsigned范围:0 ㅤ ~ 2^8ㅤ 即:0 ~ 256

short型(其实就是short int)

  • 2 byte = 16 bits

int 型(integer)

  • 一般4 byte = 32 bits(4 字节 = 32 比特)
  1. 有符号signed范围:-2^31 ~ 2^31 即:-2147483648 ~ 2147483648

  2. 无符号unsigned范围:0 ~ 2^32-1 即:0 ~ 4294967295

long型 (其实就是long int)

  • 一般4 byte = 32 bits 同int型 (这里不同操作系统可能不一样)

其实没有那么严格的规定,这里有个限定规则:

  1. short 至少占用 2 个字节。
  2. int 建议为一个机器字长。32 位环境下机器字长为 4 字节,64 位环境下机器字长为 8 字节。
  3. short 的长度不能大于 int,long 的长度不能小于 int。


    总结起来,它们的长度(所占字节数)关系为: 2 ≤ short ≤ int ≤ long
    这就意味着,short 并不一定真的”短“,long 也并不一定真的”长“,它们有可能和 int 占用相同的字节数。

    在 16 位环境下,short 的长度为 2 个字节,int 也为 2 个字节,long 为 4 个字节。16 位环境多用于单片机和低级嵌入式系统,在PC和服务器上已经见不到了。

    对于 32 位的 Windows、Linux 和 Mac OS,short 的长度为 2 个字节,int 为 4 个字节,long 也为 4 个字节。PC和服务器上的 32 位系统占有率也在慢慢下降,嵌入式系统使用 32 位越来越多。

    在 64 位环境下,不同的操作系统会有不同的结果,如下所示:
    操作系统 short int long
    Win64(64位 Windows) 2 4 4
    类Unix系统(包括 Unix、Linux、Mac OS、BSD、Solaris 等

C语言中的小数(float,double)

float型

  • 4 byte = 32 bit
  • 范围: 3.40282e+038 ~ 1.17549e-038

double型

  • 8 byte = 64 bit
  • 范围:1.79769e+308 ~ 2.22507e-308

最后就是说如果你要存的数真的太大太大太大了,我们也可以用下面这俩

long long型(long long int)

  • 最小值:-9223372036854775808
  • 最大值: 9223372036854775807

unsigned long long型(unsigned long long int)

  • 最小值:0
  • 最大值:18446744073709551615

结尾:由于作者水平有限,且这篇文章也是找了多方资料才得到的,
如有发现错误请练习作者,谢谢。

Guess you like

Origin blog.csdn.net/qq_28406527/article/details/121613488