C语言数据类型的介绍,类型的基本归类,整型在内存中的存储,原码、反码、补码,大小端等介绍

devtools/2025/1/16 1:43:57/

文章目录

  • 前言
  • 一、数据类型的介绍
      • 类型的意义
    • 1. 类型的基本归类
      • (1). 整型家族
      • (2). 浮点数家族
      • (3). 构造类型
      • (4). 指针类型
      • (5). 空类型
  • 二、整型在内存中的存储
    • 1. 原码、反码、补码
    • 2. 大小端介绍
        • 写一个程序判断你的电脑用大端还是小端字节序排列
    • 3. 练习
  • 总结


前言

C语言数据类型的介绍,类型的基本归类,整型在内存中的存储,原码、反码、补码,大小端介绍,以及练习


一、数据类型的介绍

char // 字符数据类型 // 1
short // 短整型 // 2
int // 整型 // 4
long // 长整型 // 4 / 8
long long // 更长的整型 // 8
float // 单精度浮点型 // 4
double // 双精度浮点型 // 8
  • long 在32位电脑上位 4 个字节, 64位电脑上 8 个字节。
  • long 在标准中只定义了 sizeof(long) >= sizeof(int)
  • long long 是 c99 定义的新的类型

类型的意义

  1. 使用这个类型开辟内存空间的大小(大小决定了使用范围)。
  2. 计算机如何看待内存空间的视角,若为整型,则认为它是整数,若为浮点型,就认为浮点数。

1. 类型的基本归类

1:40

(1). 整型家族

  • char类型在内存中存储以ASCII码值的形式存储,所以也归入整型家族。
  • 除了char类型
char
unsigned char
signed char
------------------
short
unsigned short
signed short
------------------
int
unsigned int
signed int
------------------
long
unsigned long
signed long
------------------
long long
unsigned long long
signed long long
------------------
float
unsigned float
signed float
------------------
double
unsigned double
signed double

(2). 浮点数家族

- float
- double

(3). 构造类型

  • 每创建一个数组,相当于构造了一个类型。
  • 比如 int arr[10] = {0};
  • 创建的类型为 int [10] 类型。
- 数组类型
- 结构体类型 struct
- 枚举类型 enum
- 联合类型 union

(4). 指针类型

- int* pi;
- char* pc;
- float* pf;
- void* pv;

(5). 空类型

  • void 表示空类型
  • 通常应用于函数的返回值类型、函数的参数、指针类型。

二、整型在内存中的存储

1. 原码、反码、补码

  • 计算机中的整数右三种2进制表示方法即原码、反码和补码。
  • 三种表示方法均有符号位数值位两部分,符号位都是用0表示正,用1表示负
  • 数值为 正数的原码、反码、补码都相同。
  • 负整数的三种表示方法各不相同。
    • 原码: 直接将数值按照正负数的形式翻译成二进制就可以得到原码。
    • 反码: 原码符号位不变,其余位数按位取反得到反码。
    • 补码: 反码加1,得到补码。
  • 对于整数在内存中存放的是补码
  • 原因如下
  • 在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;
  • 同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与源码相互转换,其运算过程是相同的,不需要额外的硬件电路。
    比如(以1-1)为例:
    cpu只有加法器,所以可以理解为 1 + (-1)
1 的原码
00000000000000000000000000000001
-1 的原码
10000000000000000000000000000001
1 + -1 
10000000000000000000000000000010 ---- 结果为-2,显然不合理
-------------------------------------------------------------
若用补码
1 的补码 (正数原码和补码相同)
00000000000000000000000000000001
-1 的原码
10000000000000000000000000000001
-1 的反码
11111111111111111111111111111110
-1 的补码
11111111111111111111111111111111
此时 1 的补码 加 -1 的补码
00000000000000000000000000000001 +
11111111111111111111111111111111
100000000000000000000000000000000
结果有33个比特位,但整型只能由32个比特位,最高位的1省去,得到0

2. 大小端介绍

  • 内存中的数据以二进制位存储,但可以以16进制显示,方便我们观察。
  • 若现在有整数的二进制序列为
  • 00010001001000100011001101000100
00010001001000100011001101000100 --- 这个为内存中的二进制位
将这个二进制位转化为16进制,方便说明
0x 11 22 33 44
见下图

在这里插入图片描述

  • 大小端排列取决于硬件。
写一个程序判断你的电脑用大端还是小端字节序排列
#include <stdio.h>
int main()
{int a = 1;int* pa = &a;char* pb = (char*)pa;if (1 == *pb){printf("小端\n");}else if(0 == *pb){printf("大端\n");}else{printf("奇怪了\n");}return 0;
}

3. 练习

// 1. 输出什么
#include <stdio.h>
int main()
{char a = 1;signed char b = -1;unsigned char c = -1;printf("a=%d,b=%d,c=%d", a, b, c);// 1 -1 255return 0;
}
// 2.输出什么
#include <stdio.h>
int main()
{char a = -128;printf("%u\n", a);// 4294967168return 0;
}
// 3. 输出什么
#include <stdio.h>
int main()
{char a = 128;printf("%u\n", a);// 4294967168return 0;
}
// 4. 输出什么
#include <stdio.h>
int main()
{int i = -20;unsigned int j = 10;printf("%d\n", i + j); // -10return 0;
}

总结

C语言数据类型的介绍,类型的基本归类,整型在内存中的存储,原码、反码、补码,大小端介绍,以及练习


http://www.ppmy.cn/devtools/18032.html

相关文章

深度学习基础之《TensorFlow框架(12)—图片数据》

一、图像基本知识 1、如何转换图片文件 回忆&#xff1a;之前我们在特征抽取中讲过如何将文本处理成数据 思考&#xff1a;如何将图片文件转换成机器学习算法能够处理的数据&#xff1f; 我们经常接触到的图片有两种&#xff0c;一种是黑白图片&#xff08;灰度图&#xff09;…

设计模式:合成复用原则(Composite Reuse Principle,CRP)介绍

合成复用原则&#xff08;Composite Reuse Principle&#xff0c;CRP&#xff09;是面向对象设计原则之一&#xff0c;它强调通过组合已有的对象来实现新的功能&#xff0c;而不是通过继承已有的类来实现。合成复用原则的核心思想是尽量使用对象组合而不是类继承&#xff0c;从…

阿里云mysql8.0 this is incompatible withsql mode=only full group by

阿里云RDS中mysql5.6升级为8.0后&#xff0c;出现如下问题&#xff1a; ### Error querying database. Cause:java.sql.SQLSyntaxErrorException: Expression #1 of SELECT listis not in GROUP BY clause and contains nonaggregatedcolumn temp.product_id which is not fun…

PC40与PC95磁芯的区别

磁芯pc95和pc40的差别在于PC95磁芯Pcv降低5%磁导率随温度变化小于PC40&#xff0c;利于谐振低温特性好,用在电源产品中低温效率高。另外就是PC95价格高。 PC是TDK公司对磁芯材料的命名&#xff0c; 类似有PC40&#xff0c;PC44&#xff0c;PC95&#xff0c;数字越大价格越高&am…

网站HTTP怎么改成HTTPS?——免费版

想把网站从HTTP转成更安全的HTTPS&#xff1f;按以下步骤走&#xff1a; 1. 选SSL证书&#xff1a; - 免费的够用就选免费的&#xff08;适合个人小站&#xff09;&#xff0c;想要更高级安全保障就买付费的&#xff08;适合企业、电商等&#xff09;。 2. 申请证书&#xff1a…

ARM学习(26)链接库的依赖查看

笔者今天来聊一下查看链接库的依赖。 通常情况下&#xff0c;运行一个可执行文件的时候&#xff0c;可能会出现找不到依赖库的情况&#xff0c;比如图下这种情况&#xff0c;可以看到是缺少了license.dll或者libtest.so&#xff0c;所以无法运行。怎么知道它到底缺少什么dll呢&…

AI边缘计算盒子+ThingSense管理平台,推动明厨亮灶智慧监管新篇章

背景随着“互联网”时代的浪潮汹涌而至&#xff0c;国家及各地政府纷纷在“十四五”规划中明确指出&#xff0c;强化食品安全管理&#xff0c;利用技术手段实现智慧监管是刻不容缓的任务。为此&#xff0c;各地正加速推进“互联网明厨亮灶”的建设步伐&#xff0c;实现系统对接…

【Unity动画系统】动画基本原理与Avater骨骼复用

动画基本原理 动画片段文件是一个描述物体变化状态的文本文件 在Unity中创建的资源文件大多都是YAML语言编写的文本文件 Curves表示一种变化状态&#xff0c;为空的话则没有记录任何内容 位置变化后的旋转变化状态&#xff1a; 动画文件里的Path名字要相同才能播放相同的动画 …