栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言 -- 数据在内存中的存储

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言 -- 数据在内存中的存储

数据在内存中的存储
  • 数据在内存中的存储
    • 数据类型介绍
    • 整型在内存中的存储
      • 正负整数的存储
      • 大小端存储

数据在内存中的存储 数据类型介绍

基本的内置类型:

  • char //1字节
  • short //2字节
  • int //4字节
  • long //4字节
  • long long //八字节
  • float //4字节
  • double //8字节

注意:C语言中并没有字符串类型,常说的字符串本质是字符指针或字符数组

类型是用来定义不同的变量的,其本质就是开辟不同大小的空间。

那么不同的类型所能表示的范围该怎么计算呢?
以char类型为例:

char类型有分有符号和无符号两种,有符号char所能表示的范围是-128~127,无符号char所能表示的范围是0~255

那么这两种范围是怎么来的呢?

  1. 无符号char类型

char类型的大小是1字节,也就是8bit,当8个bit位全为0时是所能表示的最小数,全为1时是所能表示的最大数。
(BIN)0000 0000 = (DEC)0
(BIN)1111 1111 = (DEC)255

  1. 有符号char类型

对于有符号类型,那么8bit的最高位表示的是符号位。
最大正数 (BIN) 0111 1111 = (DEC)127
因为负数在计算机中是以补码来计算的,所以不好直接求取。可以换种方式。从无符号char类型可以看出,char其最多能存储256个数据,256/2=128.
所以有符号char类型的范围也就是 -128~127

在不明确写出unsigned char时,直接写char默认为有符号类型,所以其表示的范围为-128~127.
那么问题来了:
char ch1 = 129;
char ch2 = -129;
分别表示多少呢?

ch1 = 129 = -127
ch2 = -129 = 127
也就是说,对于有符号char类型来说:

127+1=-128
-128 -1 = 127

在碰到比较大的数字可以这么计算:
char ch = 4791491 = -61;
4791491 % 256 - 256 = -61;

其他内置类型的计算方式同char类型,这里就不一一赘述了。

整型在内存中的存储 正负整数的存储
  • 首先,无论正负,计算机都是以二进制的方式存储的。
  • 其次,都是以二进制补码的方式存储的。只不过正整数的补码和原码相同。

原码、反码、补码

计算机中的有符号数有三种表示方法,即原码反码和补码。
三种表示方法均有符号位和数值位两部分,符号位都是0表示正,1表示负,而数值位的表示方法不太相同。

原码:

直接将二进制按照正负数的形式计算出来就可以

反码:

正数:反码与原码相同
负数:符号位不变,数值位按位对原码取反。

补码:

正数:补码与原码相同
负数:负数的反码+1

举例:
int x = 100;
原码:0000 0000 0000 0000 0000 0000 0110 0100
反码:0000 0000 0000 0000 0000 0000 0110 0100
补码:0000 0000 0000 0000 0000 0000 0110 0100

int y = -100;
原码:1000 0000 0000 0000 0000 0000 0110 0100
反码:1111 1111 1111 1111 1111 1111 1001 1011
补码:1111 1111 1111 1111 1111 1111 1001 1100

大小端存储

大端(存储)模式:是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;
小端(存储)模式:是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。

下面,用一个比较形象的图来理解一下大端小端:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/648725.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号