C语言基本数据类型的存储

前言

学习C语言时,我对于C语言基本数据类型不太懂。后来学习计组之后,了解了计算机内部数据的存储。这篇文章将从底层,剖析基本数据类型在计算机中是如何存储。

整型数据的表示方法

在计算机中,数据以二进制的方式存储,即我们平时所使用的十进制数,都会被转化为0101等数据。如十进制的12,转化成二进制就是1010。
我平时习惯将四个二进制数写在一起,第一,便于书写时一眼能看清位数;第二,也便于二进制与16进制的转换。
比如十进制数99,我会先看成64+32+2+1,因此转换成二进制数的时候,就是0110 0011。要记得常见的2的几次方,比如2的0次方等于1, 2的十次方等于1024。

计算机的主存储器是由一个个存储0和1的存储元件组成,每个存储元里面存储的一个二进制数,我们成为1bit 。我们常用的计算机中,一般是8个存储元为一组,存储的8个二进制数为1B(字节)。

参与运算的机器数有两种,一种是无符号数,一种是有符号数。
无符号数中,整个机器字表示的二进制位均表示数值。比如计算机中存储了机器数1000 0001,即表示十进制数129。当我们在C语言中某个数据类型前加入unsigned时,表示该数为无符号数。存储的时候,首位就是数值位。比如 存储129,且该计算机是8位计算机,那么在计算机中存储的就是1000 0001。
对于有符号数,计算机中最高位,即最前面的那一位表示符号。0表示该数为正数,1表示该数为负数。
对于有符号数的表示,有四种方式。原码、补码、反码、移码。
我们先不必在意这四个码分别是什么。
我们只需要知道,我们常用的计算机,一般都是以补码存储。
因此,我们先介绍原码和补码。为了便于举例,我们假设某个计算机是8位计算机。
127转换成二进制是多少呢——0111 1111。那-127呢?如果直接转换,根据之前所讲的首位为1则为负数,我们很容易得到1111 1111。
是的,这就是原码。我们不必死扣概念,知道这个例子即可。也就是说,正数和负数之间的差别,其实仅仅是首位的符号位。
但是,在计算机中存储的,并不是原码,而是补码。(为什么?感兴趣的可以查一下相关的资料)
对于补码而言,其正数与原码的表示方式完全相同。也就是说,127,在计算机中存储的,其实就是0111 1111。那-129呢?先给结论,-127是以1000 0001存储的。
是不是没有找出规律?
那请把目光返回到我讲补码时的1111 1111。其实,负数的补码就是将原码的符号位不变,数值位全部取反,最后在末位+1,因此,我们就得到了-127的补码——1000 0001。
发现了没有,无符号数129和有符号数的-127的存储,都是1000 0001。
理解了这两种码。那在C语言中,int,short int,long,long long仅仅是位数上的差别。
需要注意的是,32位机器中, int 是4字节,short int 是2字节,long 是4字节,long long是8字节。
执行以下代码,我们可以得到结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值