当前位置: 首页 > article >正文

数据类型及sizeof,进制转换

其实数据类型可以讲很多内容,这里看情况需要讲多久吧。

本篇基本都是理论。

目录

数据类型的分类

基本数据类型

构造数据类型

指针类型

空类型

计算数据类型或变量所占用的内存字节数

基本语法

进制转换

二进制

二进制的概念

二进制与十进制的转换

十六进制

十六进制的概念

二进制与十六进制的转换

小结


数据类型的分类

在灵气运转的变量详解(下)和scanf法术中我们第一次提到了数据类型这个概念,数据类型是定义变量或函数的存储类型和操作方式。

数据类型可以简单的分为以下四类。

基本数据类型

整数类型

在计算机中最小的存储单位是位(bit),而一个字节(byte)通常由8个二进制位组成。每个二进制位可以表示0或1。

前文中我们常常提到的int就是整型,如果按从小到大来的话:

  • char : 通常占用 1 个字节(8bit)内存空间。它既能存储字符,也能存储小整数。字符在计算机中以 ASCII 码形式存储,如
#include <stdio.h>
int main() {
    char a = 'A';
    printf("ASCII码值: %d\n", a);
    return 0;
}

 这里输出的结果是65,因为A的ASCII码值就是65。

ASCII是一种基于7位二进制编码的字符编码系统,主要用于表示英文字母、数字、标点符号和控制字符等,总共可以表示128个不同的字符‌。

图源网络,侵权删 

  • short : 短整型,一般占 2 个字节
  • int : 整型,在多数系统中占 4 个字节
  • long : 长整型,在 32 位系统通常占 4 个字节,64 位系统一般占 8 个字节
  • long long : 更长的长整型,至少占 8 个字节

浮点类型

  • float :单精度浮点型,占 4 个字节,精度约为 6 - 7 位有效数字,用于存储小数
  • double :双精度浮点型,占 8 个字节,精度约为 15 - 16 位有效数字,比float更精确
  • long double :长双精度浮点型,占用字节数因编译器和系统而异,精度比double更高

构造数据类型

构造数据类型由基本数据类型其他构造数据类型组合而成。

  • 数组 :一组相同类型元素的有序集合,元素在内存中连续存储
  • 结构体 :用户自定义的数据类型,可包含不同类型的数据成员,将相关数据组合在一起
  • 联合体 :所有成员共享同一块内存空间,同一时间只能使用一个成员
  • 枚举类型 :定义一组命名的整数常量,增强代码可读性

指针类型

这个之后会详细讲到有关于指针的。

  • 指针存储的是变量的内存地址,通过指针可直接访问和修改内存中的数据

空类型

void表示,有以下用途:

  • 函数返回值为空:函数不需要返回值时,使用void作为返回类型
  • 函数参数为空:函数不接受参数时,使用void作为参数列表
  • 通用指针:void *类型指针可指向任意类型数据,使用时需强制类型转换

计算数据类型或变量所占用的内存字节数

sizeof用于计算数据类型或变量所占用的内存字节数。

基本语法

计算数据类型的大小

sizeof(数据类型);

如:

#include <stdio.h>

int main() {
    printf("sizeof(int)= %ld\n", sizeof(int));
    return 0;
}

输出的结果为⬇️

可能有些人的程序输出的结果不是4,那是因为有的是64位机有的是32位机。

  • 32位:是计算机处理器(CPU)能够一次处理或传输的数据宽度为32位
  • 64位:是计算机处理器(CPU)能够一次处理或传输的数据宽度为64位

进制转换

上文讲了位,存储等。我们来学习下进制的转换:

在日常生活里,十进制是最为常用的计数方式,不过在计算机领域,二进制和十六进制是比较常见的。下面来学习二进制、十进制、十六进制这三个进制之间的转换。

二进制

二进制的概念

  • 在计算机中,二进制用于表示数据和指令。二进制只有0和1两个数码,代表的是电子元件的开和关的两种状态。进位规则是 “逢二进一”,借位规则是 “借一当二”。

二进制与十进制的转换

二进制 -> 十进制

  • 将二进制数的每一位乘以2的相应幂次(幂次从右往左依次为0、1、2... ...),然后将结果相加。这次常用的逐位相加法。
  • B是二进制的英文缩写,D是十进制的英文缩写

如,11010B -> D

= 0 * 2^0 + 1 * 2^1 + 0 * 2^3 + 1 * 2^4 + 1 * 2^5 

= 0 + 2 + 0 + 8 + 16

= 26

十进制 -> 二进制

  • 把十进制转换为二进制可以采取除2取余的方法,简单来说就是:除二取余直至商0。再将余数倒序排列就得到对应的十进制数。

如,26D -> B

  1. 26 / 2 = 13,余为0
  2. 13 / 2 = 6,余为1
  3. 6 / 2 = 3,余为0
  4. 3 / 2 = 1,余为1
  5. 1 / 2 = 0,余为1

然后将余数从下向上排得到11010B。

十六进制

十六进制的概念

  • 十六进制是一种基数为16的计数系统,它使用 0 - 9 十个数字和 A - F六个字母来表示 10 - 15 这六个数字
  • 十六进制在计算机领域常用于表示内存地址、颜色值等。它可以很方便与二进制进行转换,每4位二进制数可以用1位十六进制表示

二进制与十六进制的转换

二进制 -> 十六进制

  • 从二进制数的最右边(低位)开始,每4位分为一组。如果最左边(高位)的一组不足4位,则在左边补0
  • 将二进制转十六进制,组合结果
  • 十六进制可以用H表示

如,11010B -> H

  1. 分组,0001和1010
  2. 0001B转换为十进制为1,在十六进制中对应的是1;1010B转换为10,在十六进制中,10为A
  3. 组合结果为1A

十六进制 -> 二进制

  • 拆分十六进制数
  • 将每个十六进制数字转换为4位二进制数
  • 组合二进制数

如1A H -> B

  1. 拆分为1和A
  2. 1对应的二进制是0001,A对应的十进制是10,对应的二进制是1010
  3. 组合0001 1010,一般省略前面的0
  4. 结果为11010

小结

系统的学习了计算机的数据类型以及sizeof运算符;还有二进制、十六进制,以及这些进制之间的转换。


http://www.kler.cn/a/585210.html

相关文章:

  • 蓝桥杯 排序题目【算法赛】
  • Unity光线追踪移动端降级适配技术指南
  • Mybatis 框架学习
  • C# Type类中Name、FullName、Namespace、AssemblyQualifiedName的区别
  • 了解一下HTTP的短连接和长连接
  • 从波士顿动力到Figure AI:探寻人工智能驱动的机器人智能化
  • UdpClient
  • 什么是 MyBatis?
  • 基于卡尔曼滤波的雷达光电多目标航迹融合算法matlab仿真
  • 基于ssm的宠物医院信息管理系统(全套)
  • 线程池参数调优
  • 游戏引擎学习第152天
  • AI时代研究卷积神经网络(CNN)工具与方法
  • 【即插即用涨点模块】CAA上下文锚点注意力机制:有效捕捉全局信息,助力高效涨点【附源码+注释】
  • 21天 - 说说 TCP 的四次挥手?TCP 的粘包和拆包能说说吗?说说 TCP 拥塞控制的步骤?
  • 谷歌 Gemini 2.0 Flash实测:1条指令自动出图+配故事!
  • el-table 插槽踩过的坑 :slot-scope 和#default的区别
  • 代码随想录-回溯
  • 如何优雅地将Collection转为Map?
  • 平安养老险广西分公司2025年“3∙15”金融消费者权益教育宣传活动暨南湖公园健步行活动