数据类型及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.mzph.cn/news/897822.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pjsip dtmf发送和接收(pjsua)

DTMF(双音多频,Dual-Tone Multi-Frequency)是一种用于电话系统的信号技术,通过组合两个不同频率的音频信号来表示数字和符号。以下是DTMF的主要使用背景和应用场景: 电话拨号 DTMF最常见的用途是电话拨号。当用户按下电话键盘上的数字或符号时,电话会生成两个特定频率的音…

落雪音乐Pro 8.8.6 | 内置8条音源,无需手动导入,纯净无广告

洛雪音乐Pro版内置多组稳定音源接口&#xff0c;省去手动导入的繁琐操作&#xff0c;安装即可畅听海量音乐。延续原版无广告的纯净体验&#xff0c;支持歌单推荐与音源切换&#xff0c;满足个性化听歌需求。此版本仅支持在线播放&#xff0c;无法下载音乐&#xff0c;且与原版不…

mac安装navicat及使用

0.删除旧的 sudo rm -Rf /Applications/Navicat\ Premium.app sudo rm -Rf /private/var/db/BootCaches/CB6F12B3-2C14-461E-B5A7-A8621B7FF130/app.com.prect.NavicatPremium.playlist sudo rm -Rf ~/Library/Caches/com.apple.helpd/SDMHelpData/Other/English/HelpSDMIndexF…

【Unity】 HTFramework框架(六十二)Agent编辑器通用智能体(AI Agent)

更新日期&#xff1a;2025年3月14日。 Github源码&#xff1a;[点我获取源码] Gitee源码&#xff1a;[点我获取源码] 索引 编辑器通用智能体AIAgent类Friday&#xff08;星期五&#xff09;启用智能体设置智能体类型开放智能体权限智能体交互资源优化批处理运行代码联网搜索休闲…

EverArt MCP 服务器安装调试笔记 -cline

EverArt MCP 服务器安装调试笔记 问题描述 用户在使用 EverArt MCP 服务器时遇到报错&#xff1a;“MCP error -1: Connection closed”。 调试过程 检查配置文件 cline_mcp_settings.json: 确认 everart 服务器的配置信息&#xff0c;包括 command、args 和 env 是否正确。…

MFC中使用Create或CreateDialog创建对话框失败,GetLastError错误码为1813(找不到映像文件中指定的资源类型)

文章目录 创建对话框失败示例、原因分析及解决方案示例代码错误原因解决方案 AFX_MANAGE_STATE(AfxGetStaticModuleState())作用一、功能1. 模块状态切换2. 自动状态恢复 二、为什么要用该函数&#xff1f;三、必须使用该宏的典型场景1. MFC 扩展 DLL&#xff08;Extension DLL…

php进程管理

php-fpm(fastcgi process manager)是PHP 的FastCGI管理器&#xff0c;管理PHP的FastCGI进程&#xff0c;提升PHP应用的性能和稳定性 php-fpm是一个高性能的php FastCGI管理器&#xff0c;提供了更好的php进程管理方式&#xff0c;可以有效的控制内存和进程&#xff0c;支持平滑…

《MySQL数据库从零搭建到高效管理|表的增删改查(基础)》

目录 引言&#xff1a; 一、表的操作 1.1 创建学生表 1.2 查看表结构 1.3 删除表 1.4 修改表名 1.5 添加字段 1.6 修改字段 1.7 删除字段 1.8 小结 二、CRUD 2.1 新增&#xff08;Create&#xff09;数据 2.2 查询&#xff08;Retrieve&#xff09;数据 2.3 修改&…

建筑管理(2): 施工承包模式,工程监理,质量监督

文章目录 一. 施工承包模式1. 施工总承包模式1.1 施工总承包的特点1.2 施工总承包模式中的承包方 2. 平行承包模式3. 联合体与合作体承包模式 二. 工程监理1. 强制实行监理的工程范围1.1 国家重点建设工程1.2 大中型公用事业工程(重点)1.3 成片开发建设的住宅小区工程1.4 必须实…

Spring Boot与Apache Ignite集成:构建高性能分布式缓存和计算平台

1. 前言 1.1 什么是Apache Ignite Apache Ignite是一个高性能的分布式内存计算平台,支持内存缓存、分布式计算、流处理和机器学习等功能。它提供了低延迟的数据访问和强大的计算能力,适用于需要高性能和可扩展性的应用。 1.2 为什么选择Apache Ignite 高性能:Ignite利用内…

REST 请求返回 Invalid Credentials

REST 请求返回 “Invalid Credentials”&#xff08;无效凭据&#xff09;&#xff0c;通常表示身份验证失败。可能的原因和解决方案如下&#xff1a; 可能的原因 & 解决方案 用户名或密码错误 确保使用正确的用户名和密码。如果 API 需要 Base64 编码的 Authorization 头…

C++Primer学习(6.7 函数指针——难!)

6.7 函数指针 (这一章节比较难) 函数指针指向的是函数而非对象。和其他指针一样&#xff0c;函数指针指向某种特定类型。函数的类型由它的返回类型和形参类型共同决定&#xff0c;与函数名无关。例如: //比较两个 string 对象的长度 bool lengthCompare(const string &,co…

高级java每日一道面试题-2025年2月26日-框架篇[Mybatis篇]-Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式 ?

如果有遗漏,评论区告诉我进行补充 面试官: Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式 ? 我回答: 在Java高级面试中讨论MyBatis如何将SQL执行结果封装为目标对象并返回的过程时&#xff0c;我们可以从过程细节和映射形式两个方面来综合解答这个问…

react(一):特点-基本使用-JSX语法

初识React React是一个用于构建用户界面的 JavaScript 库&#xff0c;由 Facebook 开发和维护。 官网文档&#xff1a;React 官方中文文档 特点 1.声明式编程 2.组件化开发 3.多平台适配 开发依赖 开发React必须依赖三个库&#xff1a; 1.react&#xff1a;包含react所必…

【Python+HTTP接口】POST请求不同请求头构造

1、{‘Content-Type’: ‘application/json’} import requestsbody {"name1": "value1","name2": "value2"} requests.post(urlurl, databody)2、{“Content-Type”: “application/x-www-form-urlencoded; charsetUTF-8”} impor…

Java常用API:String与ArrayList的设计哲学与实践应用

在Java编程中&#xff0c;API&#xff08;应用程序编程接口&#xff09;是开发者最强大的工具之一。它们封装了复杂的底层逻辑&#xff0c;提供了简洁的调用方式。本文将聚焦Java中两个最常用的API——String和ArrayList&#xff0c;从底层原理到实际应用&#xff0c;结合深度思…

Python的字符串优雅优化策略:特定编码 -> Unicode码点 -> UTF-8(可自定义)

Python利用唯一uni-pot中介打理&#xff0c;任意制式输出&#xff08;首选uyf-8&#xff09;。 笔记模板由python脚本于2025-03-14 23:37:04创建&#xff0c;本篇笔记适合喜欢探究字符串编码细节的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值&#xff1a;在于输出思…

linux 时间同步(阿里云ntp服务器)

1、安装ntp服务 rootlocalhost ~]# yum -y install ntp 已加载插件&#xff1a;fastestmirror, langpacks Loading mirror speeds from cached hostfile* base: mirrors.nju.edu.cn* centos-sclo-rh: mirrors.nju.edu.cn* centos-sclo-sclo: mirrors.huaweicloud.com* epel: m…

虚拟化数据恢复—重装系统服务器崩了的数据恢复过程

虚拟化数据恢复环境&故障&#xff1a; VMware虚拟化平台 vmfs文件系统 工作人员误操作重装操作系统&#xff0c;服务器崩溃。 重装系统会导致文件系统元文件被覆盖。要恢复数据&#xff0c;必须找到&提取重装系统前的文件系统残留信息&#xff0c;通过提取出来的元文件…

微信开发者工具内建终端使用不了npm,但是cmd可以

下载cnpm并配置镜像源 终端cmd&#xff1a; npm install -g cnpm --registryhttp://registry.npmmirror.com 打开微信开发者工具&#xff0c;找到方框的文件右击选择内建终端打开 初始化&#xff1a; npm init -y 发现npm没有此命令 关闭微信开发工具&#xff0c;用管理…