数据类型--整形

这篇博客详细介绍了在64位系统中C++的整型数据类型,包括int、short、long(与int相同)、long long及其内存占用、取值范围和printf打印格式。此外,还提到了字符型char的特性以及数据类型的原码表示,帮助理解有符号整数的范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据类型–整形

本文内容基于64位系统

c语言中的定义变量的格式为:数据类型 变量名

int a;

:变量名必须以字母和下划线开头,不能以数字开头。

整形 int

用int类型定义的变量在内存中占4个字节
变量的范围在 -2^31 ~ 2^31-1(有符号)

用函数printf打印整形的格式为

printf("%d",a);

短整型 short

用short类型定义的函数在内存中占2个字节
变量的范围在 -2^15 ~ 2^15 (有符号)

用函数printf打印短整形的格式为

printf("%hd",a);

一般情况下用%d也可以

长整型 long(同int型)

用long类型定义的函数在内存中占4个字节
变量的范围在 -2^31 ~ 2^31-1

用函数printf打印短整形的格式为

printf("%ld",a);

长长整形 long long

用onglong类型定义的函数在内存中占8个字节
变量的范围在 -2^63 ~ 2^63-1

用函数printf打印短整形的格式为

printf
### 汇川 MUODBUS-RTU 协议中的地址映射数据类型 汇川 MUODBUS-RTU 协议遵循 Modbus RTU 的通用规则,在其地址映射中定义了多种数据类型用于表示不同的寄存器和功能码。以下是关于该协议中地址映射及其对应数据类型的详细说明: #### 1. 寄存器类型与地址范围 在汇川 MUODBUS-RTU 中,地址通常由五位十进制数构成,其中第一位指定了寄存器的类型,后续部分则表示具体的偏移量[^1]。 | **寄存器类型** | **首位编号** | **Modbus 功能码** | **数据类型** | |------------------|--------------|--------------------|---------------| | 输入状态 (Discrete Inputs) | `1` | `02` | 布尔型 (`BOOL`) | | 输出线圈 (Coils) | `0` | `01`, `05`, `15` | 布尔型 (`BOOL`) | | 输入寄存器 (Input Registers)| `3` | `04` | 整型/浮点型 (`INT`, `FLOAT`) | | 保持寄存器 (Holding Registers)| `4` | `03`, `06`, `16` | 整型/浮点型 (`INT`, `FLOAT`) | #### 2. 数据类型的具体解释 - **布尔型 (`BOOL`)** 对应于输入状态和输出线圈两类寄存器,这些寄存器存储的是单比特值(即开或关的状态)。它们通过功能码 `01` 和 `02` 进行读取操作,而写入操作则分别使用功能码 `05` 或批量设置的功能码 `15`。 - **整型 (`INT`)** 主要应用于输入寄存器和保持寄存器中,能够保存有符号或无符号的数值信息。具体来说,一个 16 位寄存器可以容纳 `-32768 ~ 32767` 范围内的有符号整数或者 `0 ~ 65535` 范围内的无符号整数。 - **浮点型 (`FLOAT`)** 当需要处理高精度数值时,比如温度、压力等测量参数,则会利用两个连续的 16 位寄存器来组合成一个 IEEE 754 标准下的 32 位浮点数。这种情况下,实际应用可能涉及字节序调整以适配不同设备间的通信需求。 #### 示例代码展示如何解析不同类型的数据 下面提供了一段 Python 示例程序演示如何依据上述规则从串口接收到的一组原始十六进制数据中提取出对应的布尔值以及转换后的浮点数值: ```python import struct def parse_modbus_data(data, register_type): if register_type == 'COIL': # 解析为布尔值 value = bool(int.from_bytes(data[:1], byteorder='big')) elif register_type == 'INPUT_REGISTER' or register_type == 'HOLDING_REGISTER': if len(data) >= 4: # 尝试解码为浮点数 try: value = struct.unpack('>f', data[:4])[0] except Exception as e: raise ValueError(f"Failed to unpack float: {e}") else: # 默认按短整形解读 value = int.from_bytes(data[:2], byteorder='big') return value # 测试用例 coil_data = b'\x01' input_register_data = b'\x42\xC8' # 表示浮点数 20.5 holding_register_float_data = b'\x40\x9A\x99\x9A' # 表示浮点数 3.14159 print(parse_modbus_data(coil_data, 'COIL')) # 应打印 True print(parse_modbus_data(input_register_data, 'INPUT_REGISTER')) # 应打印 20.5 print(parse_modbus_data(holding_register_float_data, 'HOLDING_REGISTER')) # 应打印约等于 pi 的值 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值