数据类型与进制转换
深度科普教学培训文档

从Bit到QWord,从二进制到十六进制
完整覆盖C语言标准类型 + PLC工控类型
适合教学培训、新人入门、工程师参考
第一篇 数据类型详解
第1章 数据类型概述
数据类型是计算机科学中最基础、最重要的概念之一。它定义了数据的存储方式、取值范围和允许的操作。理解数据类型,是理解计算机工作原理的第一步。
本篇将完整覆盖:基础位操作类型、PLC工控标准类型、C语言标准类型、浮点类型及其他常用类型,每一种类型都从以下几个维度详细说明:
① 占用位数和字节数
② 有符号 / 无符号属性
③ 精确的数值取值范围
④ 字母缩写的含义
⑤ 底层二进制存储方式
⑥ 适用场景及注意事项

图1-1 数据类型字节大小层级关系示意图
第2章 基础位操作类型
这是最基础的数据单位,从单个Bit到64位QWord,是所有高级数据类型的基石。
2.1 Bit(位)
属性 | 值 |
占用位数 | 1位 |
占用字节 | 1/8字节(不能单独寻址) |
有符号/无符号 | 无符号 |
取值范围 | 0 或 1 |
字母含义 | Binary digit(二进制数字) |
底层存储:最小的存储单位,只能表示两个状态。
适用场景:布尔逻辑判断、标志位、PLC输入输出点状态、位掩码操作。
2.2 Nibble(半字节 / 四位组)
属性 | 值 |
占用位数 | 4位 |
占用字节 | 1/2字节 |
有符号/无符号 | 无符号 |
取值范围 | 0 ~ 15 (0x0 ~ 0xF) |
字母含义 | "啃"一口的意思,表示半个字节 |
底层存储:正好对应1位十六进制数(0-F)。
适用场景:BCD码、十六进制数字、紧凑数据存储。
2.3 Byte(字节)
属性 | 值 |
占用位数 | 8位 |
占用字节 | 1字节 |
有符号/无符号 | 通常无符号 |
取值范围 | 0 ~ 255 (0x00 ~ 0xFF) |
字母含义 | 由 "bite" 演变而来,表示一口 |
底层存储:计算机最小可寻址单位。
适用场景:ASCII字符、原始字节数据、图片像素、网络数据包。
2.4 Word(字)
属性 | 值 |
占用位数 | 16位 |
占用字节 | 2字节 |
有符号/无符号 | 通常无符号(但可解释为有符号) |
取值范围 | 0 ~ 65535 (0x0000 ~ 0xFFFF) |
字母含义 | "字",自然语言中一个字的大小 |
底层存储:2个连续的Byte,注意大端/小端字节序问题。
适用场景:16位整数、Unicode字符、内存偏移、端口号。
2.5 DWord(双字 / Double Word)
属性 | 值 |
占用位数 | 32位 |
占用字节 | 4字节 |
有符号/无符号 | 通常无符号 |
取值范围 | 0 ~ 4,294,967,295 (0xFFFFFFFF) |
字母含义 | Double = 双,即2个Word |
底层存储:4个连续的Byte = 2个Word。
适用场景:32位整数、内存地址、时间戳、IP地址(IPv4)。
2.6 QWord(四字 / Quad Word)
属性 | 值 |
占用位数 | 64位 |
占用字节 | 8字节 |
有符号/无符号 | 通常无符号 |
取值范围 | 0 ~ 18,446,744,073,709,551,615 |
字母含义 | Quad = 四,即4个Word |
底层存储:8个连续的Byte = 2个DWord。
适用场景:64位整数、大文件偏移、高精度时间戳、IPv6地址。
2.7 LWord(长字 / Long Word)
属性 | 值 |
占用位数 | 32位或64位(依平台而定) |
占用字节 | 4字节或8字节 |
有符号/无符号 | 通常无符号 |
主要应用 | PLC编程(西门子等) |
与DWord区别 | 在多数PLC中LWord = 32位 = DWord |
2.8 UWord / UDWord / UQWord(无符号字系列)
类型 | 位数 | 字节 | 取值范围 | 字母含义 |
UWord | 16 | 2 | 0~65535 | Unsigned Word |
UDWord | 32 | 4 | 0~4,294,967,295 | Unsigned DWord |
UQWord | 64 | 8 | 0~1.8e19 | Unsigned QWord |
第3章 PLC工控标准类型
PLC(可编程逻辑控制器)有一套独立的标准数据类型,主要遵循 IEC 61131-3 标准。以下是主流PLC(西门子、三菱、AB等)通用的类型定义。

图3-1 PLC数据类型内存布局示意图
3.1 短整数系列
类型 | 位数 | 字节 | 有符号/无符号 | 取值范围 | 含义 |
SInt | 8 | 1 | 有符号 | -128 ~ 127 | Short Integer |
USInt | 8 | 1 | 无符号 | 0 ~ 255 | Unsigned Short Int |
适用场景:IO模块状态、计数器、小型循环变量、传感器数值范围较小的情况。
3.2 整数系列
类型 | 位数 | 字节 | 有符号/无符号 | 取值范围 | 含义 |
Int | 16 | 2 | 有符号 | -32,768 ~ 32,767 | Integer |
UInt | 16 | 2 | 无符号 | 0 ~ 65,535 | Unsigned Integer |
适用场景:PLC中最常用的整数类型,用于大多数模拟量、计数、计算。
3.3 双整数系列
类型 | 位数 | 字节 | 有符号/无符号 | 取值范围 | 含义 |
DInt | 32 | 4 | 有符号 | -2,147,483,648 ~ 2,147,483,647 | Double Integer |
UDInt | 32 | 4 | 无符号 | 0 ~ 4,294,967,295 | Unsigned DInt |
适用场景:高精度计算、脉冲计数(编码器)、时间戳、文件偏移。
3.4 长整数系列
类型 | 位数 | 字节 | 有符号/无符号 | 取值范围 | 含义 |
LInt | 64 | 8 | 有符号 | -9e18 ~ 9e18 | Long Integer |
ULInt | 64 | 8 | 无符号 | 0 ~ 1.8e19 | Unsigned LInt |
适用场景:超高精度累计计数、纳秒级时间戳、大型数据库索引。
3.5 浮点型系列
类型 | 位数 | 字节 | 标准 | 有效数字 | 取值范围 | 含义 |
Real | 32 | 4 | IEEE754单精度 | 约6-7位 | ±1.18e-38 ~ ±3.4e38 | 实数 |
LReal | 64 | 8 | IEEE754双精度 | 约15-17位 | ±2.23e-308 ~ ±1.8e308 | Long Real |
适用场景:模拟量换算、PID控制、运动控制、温度压力等工艺参数。
3.6 PLC与通用编程的类型对照表
PLC类型 | C语言等价类型 | 说明 |
SInt | signed char | 都是8位有符号 |
USInt | unsigned char | 都是8位无符号 |
Int | short | 都是16位有符号 ⚠️ 不是int! |
UInt | unsigned short | 都是16位无符号 |
DInt | int / long | 都是32位有符号 |
UDInt | unsigned int / unsigned long | 都是32位无符号 |
LInt | long long | 都是64位有符号 |
Real | float | 都是IEEE754单精度 |
LReal | double | 都是IEEE754双精度 |
第4章 C语言标准类型
4.1 字符型
类型 | 位数 | 字节 | 有符号/无符号 | 取值范围 | 说明 |
char | 8 | 1 | 依编译器而定 | -128~127或0~255 | 默认是否有符号依平台 |
unsigned char | 8 | 1 | 无符号 | 0 ~ 255 | 明确无符号,用于字节数据 |
signed char | 8 | 1 | 有符号 | -128 ~ 127 | 明确有符号 |
4.2 短整型
类型 | 位数 | 字节 | 有符号/无符号 | 取值范围 | 说明 |
short | 16 | 2 | 有符号 | -32,768 ~ 32,767 | = PLC的Int |
unsigned short | 16 | 2 | 无符号 | 0 ~ 65,535 | = PLC的UInt |
4.3 整型
类型 | 位数 | 字节 | 有符号/无符号 | 取值范围 | 说明 |
int | 32 | 4 | 有符号 | -2,147,483,648 ~ 2,147,483,647 | 最常用,= PLC的DInt |
unsigned int | 32 | 4 | 无符号 | 0 ~ 4,294,967,295 | = PLC的UDInt |
4.4 长整型
类型 | 32位系统 | 64位Linux | 64位Windows | 说明 |
long | 4字节(32位) | 8字节(64位) | 4字节(32位) | 最不可移植的类型! |
unsigned long | 4字节 | 8字节 | 4字节 | 同上 |
4.5 长长整型
类型 | 位数 | 字节 | 有符号/无符号 | 取值范围 | 说明 |
long long | 64 | 8 | 有符号 | -9e18 ~ 9e18 | C99引入,跨平台一致 |
unsigned long long | 64 | 8 | 无符号 | 0 ~ 1.8e19 | = PLC的ULInt |
4.6 浮点型
类型 | 位数 | 字节 | 标准 | 有效数字 | 说明 |
float | 32 | 4 | IEEE754单精度 | 约6-7位 | = PLC的Real |
double | 64 | 8 | IEEE754双精度 | 约15-17位 | = PLC的LReal,默认选择 |
long double | 80/128 | 10/16 | 80位扩展精度 | 约18-19位 | 依编译器实现,x86是80位 |
第5章 其他常用类型
5.1 bool(布尔型)
属性 | C语言 | C++ | 说明 |
占用大小 | 通常1字节 | 通常1字节 | 不能是1位 |
取值 | 0(false) / 非0(true) | false / true | C++有关键字,C用宏 |
底层存储 | 0表示假,非零表示真 | 同左 | 条件判断时非零即真 |
5.2 string(字符串)
C语言:字符串本质是以'\0'结尾的char数组。没有真正的string类型,用char*表示。
C++/Java/Python:string是封装好的类,底层仍是字符数组,但提供拼接、查找、替换等方法。
PLC:STRING类型通常有固定长度(如254字符+1结束符),用于文本显示、报警信息。
5.3 void(空类型)
void不存储数据,表示"无类型":
• 函数返回值:void func() 表示函数不返回任何值
• 函数参数:int func(void) 表示函数不接受参数
• void* 指针:通用指针,可以指向任何类型的数据
5.4 时间类型
类型 | 大小 | 精度 | 取值范围 | 说明 |
time_t | 32/64位 | 秒 | 1970年至今 | Unix时间戳 |
struct timeval | 64位+ | 微秒 | 同上 | Linux高精度时间 |
TIME(PLC) | 32位 | 毫秒 | T#0ms ~ T#24d | IEC61131时间类型 |
DATE(PLC) | 32位 | 天 | D#1970-1-1 ~ 2106 | 日期类型 |
第二篇 进制转换详解
第6章 进制基础概念
6.1 四种进制总览
进制 | 基数 | 符号集 | 前缀 | 应用场景 |
二进制 | 2 | 0,1 | 0b | 硬件、位运算 |
八进制 | 8 | 0-7 | 0 | Unix权限、老旧系统 |
十进制 | 10 | 0-9 | 无前缀 | 人类日常、商业计算 |
十六进制 | 16 | 0-9,A-F | 0x | 内存地址、颜色、调试 |

图6-1 各进制数位权值示意图
6.2 核心概念:基数与位权
• 基数:每一位可能出现的符号个数。N进制基数为N。
• 位权:每一位的权重 = 基数^位置,位置从右往左从0开始计数。
二进制位权(从右往左):
2^72^62^52^42^32^22^12^0
1286432168421
十六进制位权(从右往左):
16^316^216^116^0
4096256161
第7章 全套进制转换方法
7.1 任意进制 → 十进制:位权展开法
公式:数值 = Σ(第i位数字 × 基数^i)(i从0开始,从右往左)
【例1】二进制 1011.01 → 十进制
整数部分:1×2³ + 0×2² + 1×2¹ + 1×2⁰ = 8 + 0 + 2 + 1 = 11
小数部分:0×2⁻¹ + 1×2⁻² = 0 + 0.25 = 0.25
结果:11.25 ✓
【例2】十六进制 0x2A.8 → 十进制
整数部分:2×16¹ + 10×16⁰ = 32 + 10 = 42
小数部分:8×16⁻¹ = 0.5
结果:42.5 ✓
【例3】八进制 052.4 → 十进制
整数部分:5×8¹ + 2×8⁰ = 40 + 2 = 42
小数部分:4×8⁻¹ = 0.5
结果:42.5 ✓
7.2 十进制 → 任意进制
整数部分:除基取余法(逆序排列)
步骤:① 用基数除十进制数,得到商和余数② 商继续除以基数③ 直到商为0④ 余数逆序排列
【例1】十进制 42 → 二进制
42 ÷ 2 = 21余 0← 最低位
21 ÷ 2 = 10余 1
10 ÷ 2 = 5余 0
5 ÷ 2 = 2余 1
2 ÷ 2 = 1余 0
1 ÷ 2 = 0余 1← 最高位
逆序:1 0 1 0 1 0 → 101010 ✓
【例2】十进制 42 → 十六进制
42 ÷ 16 = 2余 10 (A)
2 ÷ 16 = 0余 2
逆序:2 A → 0x2A ✓
小数部分:乘基取整法(顺序排列)
步骤:① 用基数乘小数部分,得到整数和新小数② 取出整数③ 重复直到小数为0或精度足够④ 整数顺序排列
【例】十进制 0.625 → 二进制
0.625 × 2 = 1.25 → 取整 1 ← 最高位
0.25 × 2 = 0.5 → 取整 0
0.5 × 2 = 1.0 → 取整 1 ← 最低位
顺序:0.1 0 1 → 0.101 ✓
7.3 二进制快速转Word/DWord
2的幂 | 数值 | 记忆技巧 | 应用 |
2^0 | 1 | - | |
2^1 | 2 | - | |
2^2 | 4 | - | |
2^3 | 8 | - | |
2^4 | 16 | - | 1位十六进制 |
2^7 | 128 | - | Byte最大正数 |
2^8 | 256 | - | 1Byte=256个值 |
2^10 | 1024 | 约1千 | 1KB |
2^15 | 32768 | 约3万 | Word最大正数 |
2^16 | 65536 | 约6.5万 | 1Word=65536个值 |
2^20 | 1,048,576 | 约100万 | 1MB |
2^31 | 2,147,483,648 | 约21亿 | DWord最大正数 |
2^32 | 4,294,967,296 | 约43亿 | 1DWord值个数 |
【Word速算】二进制转16位有符号整数:
最高位为0(正数):按位权展开计算
最高位为1(负数):取反加1得到绝对值,加负号
【例】二进制 11111111 11111011 → Word值
最高位是1,负数。取反:00000000 00000100
加1:00000000 00000101 = 5
结果:-5 ✓

图7-1 原码反码补码转换关系图
第8章 深入原码、反码、补码
8.1 三种码的定义(以8位为例)
码制 | 正数规则 | 负数规则 | +5 | -5 | 双零问题 |
原码 | =本身 | 符号位1,其余绝对值 | 00000101 | 10000101 | 有(两个零) |
反码 | =原码 | 符号位1,其余取反 | 00000101 | 11111010 | 有(两个零) |
补码 | =原码 | 反码 + 1 | 00000101 | 11111011 | 无(唯一零) |
8.2 为什么计算机用补码?
原因1:统一加法和减法,只需一个加法器电路(硬件简化)
【验证】8 - 3 = 5
00001000(+8)
+ 11111101 (-3补码)
————————
1 00000101 (溢出舍去最高位) = 5 ✓
原因2:唯一的零,不浪费编码空间
原码有两个零:+0(00000000) 和 -0(10000000)
补码只有一个零:00000000,10000000被用来表示-128
8.3 重要误区澄清
全篇总结
数据类型核心速查表
大小 | 无符号单位 | PLC无符号 | C无符号 | PLC有符号 | C有符号 |
8位(1B) | Byte | USInt | unsigned char | SInt | signed char |
16位(2B) | Word | UInt | unsigned short | Int | short |
32位(4B) | DWord | UDInt | unsigned int | DInt | int |
64位(8B) | QWord | ULInt | unsigned long long | LInt | long long |
进制转换口诀
• 任意转十:按位乘权,求和即得
• 十转任意:除基取余,逆序排列
• 二八十六:分组对应,四位一组
• 补码计算:取反加一,符号不变
—— 本篇完 ——
夜雨聆风