[C语言]数据的存储_数据类型:整形存储和大小端

1、数据类型的详细介绍

基本的内置类型:

char            //字符数据类型

short           //短整型

int               //整型

long            //长整型

long long    //更长的整型(在32位平台下是4个字节,在64位平台下是8个字节)

float            //单精度浮点型

double        //双精度浮点型

//C语言是否有字符串类型

类型的意义:

1、使用这个类型开辟内存空间的大小(大小决定了适用范围)

2、如何看待内置空间的视角

1.1类型的基本归类

整型:

char        //char之所以也属于整型是因为字符在内存中存的是ASCII值,是整型

       unsigned char

       singed char

short

        unsigned short[int]

        signed short[int]

int           

    unsigned int

    signed int

long

       unsigned long[int]

       signed long[int]

//int a; ——> signed a;而char到底是unsigned char还是signed char是标准未定义的,取决于编译器的实现。而short、long和int都是一样的。

//之所以存在有符号和无符号之分,是因为数据有时仅存在正数,如:身高、体重,没有符号位一说,这时候我们就用unsigned int;也有一些数据即有正数又有负数存在的可能性,比如:温度。这时候是正是负取决于符号位,符号位为0是正数,为1是负数,我们就用signed int

浮点型:

 float

double

//只要是表示小数就可以用浮点型,float的精度低,存储的数据范围较小,而double的精度更高,存储的数据范围更大

 构造类型(自定义类型):

>  数组类型  //比如int arr[10]的类型是int [10]

>  结构体类型  struct

>  枚举类型  enum

>  联合类型  union

 指针类型:

int *p;

char *pa;

float* pb;

void *pc;

空类型:

void表示空类型(无类型)

通常应用于函数的返回类型、函数的参数、指针类型

//第一个void表示函数不会返回值
//第二个void表示函数不需要传任何参数
void test(void)
{
}
int main()
{
  return 0;
}

2、整形在内存中的存储

变量的创建是要在内存中开辟空间的,空间的大小是根据不同类型而决定的。那么数据在所开辟的内存空间中到底是如何存储的?

int a=20;

int b=-10;

2.1原码、反码、补码

计算机中的整数有3种二进制表示方法,即原码、反码、补码

原码:根据数值的正负直接写出二进制序列

反码:符号位不变,其他位按位取反

补码:反码+1

正的整数原码、反码、补码相同

负的整数的原码、反码、补码需要计算

int main()
{
  int a=20;
  //00000000000000000000000000010100
  //20是正整数原码、反码、补码相同
  //用16进制位表示
  //0x00 00 00 14
  int b=-10;
  //10000000000000000000000000001010——原码
  //0x80 00 00 0a
  //11111111111111111111111111110101——反码
  //0xfffffff5
  //11111111111111111111111111110110——补码
  //0xfffffff6
  return 0;
}
  

  我们会发现调试所显示的存储方式和我们计算的方式是一样的,存的是整数的补码

结论:整型在内存中是以补码的形式存放的。

那为什么要存放补码呢?

在计算机系统中,数值一律用补码表示和储存。原因在于,使用补码,可以将符号位数值域统一处理。

同时,加法和减法也可以统一处理(cpu只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。(因为补码符号位不变,其他位按位取反再+1可以得到原码)

2.2大小端的介绍 

什么是大端和小端:

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

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

假设我们要存20,我们知道20的16进制为0x00 00 00 14

有两种存储形式:

1、00 00 00 14(大端字节序存储)

2、14 00 00 00(小端字节序存储)

为什么有大端和小端:

这两种模式的选择取决于特定的系统架构和操作系统。例如,Intel x86架构采用的是小端模式,而某些版本的ARM处理器则可以选择大端模式或小端模式。 大端和小端的概念之所以重要,是因为它们直接影响到多字节数据类型的操作和处理。例如,当你从一个文件读取数据或将数据写入到一个文件时,你需要确保文件的格式与你所使用的系统的字节顺序相匹配。如果不匹配,可能会导致数据损坏或丢失。 总的来说,大端和小端是描述数据如何在内存中存储的重要概念,它们对于理解和处理多字节数据类型至关重要。

2.3练习:

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

#include<stdio.h>
int main()
{
	int a = 1;
	if (*(char*)&a == 1)//强制类型转换,char*只取第一个字节
	{
		printf("小端\n");
	}
	else
	{
		printf("大端\n");
	}
	return 0;
}

本次分享就到这里,感谢观看和关注! 

 

 

 

最近更新

  1. TCP协议是安全的吗?

    2024-04-20 19:54:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-20 19:54:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-20 19:54:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-20 19:54:01       20 阅读

热门阅读

  1. uniapp小程序——长按识别二维码

    2024-04-20 19:54:01       12 阅读
  2. Ansible相关

    2024-04-20 19:54:01       13 阅读
  3. Python数据挖掘项目开发实战:大数据处理

    2024-04-20 19:54:01       13 阅读
  4. RTT学习

    2024-04-20 19:54:01       12 阅读
  5. 11篇 Es集群环境安装的步骤

    2024-04-20 19:54:01       10 阅读
  6. Spring-Aop源码解析(下)

    2024-04-20 19:54:01       13 阅读
  7. 前端-renren-ui学习

    2024-04-20 19:54:01       13 阅读
  8. 自动化运维工具Ansible模块的介绍与使用

    2024-04-20 19:54:01       12 阅读
  9. 作文笔记7 说明文说明方法

    2024-04-20 19:54:01       10 阅读