关于'ab'的类型

本文探讨了C++中特殊形式的字符常量,如'ab'和'/13a'的内部表示方法及其如何被编译器处理。这些常量实际上是以整数形式存储,并且在内存中以特定的方式表示。

今天看MSDN偶然间发现其中有这么一句:

int mbch = 'ab';

对'ab'这种表示方法还是第一次见到(别见笑啊,呵呵):P

并且它的类型是const int,这更让我感到迷惑。仔细研究了一番,稍微弄懂了一些,

特地写下这篇文章记录一下。以备日后察看(VC6)。

关于'ab'等字符常量的类型,周星星(bruceteen)说C++标准文档中是有规定的(具体我没有去翻阅文档),他的类型是const int 型的。

后来慢慢发现了mbch在内存中是的值是0x6162(十进制就是24930了)。

'/13a'这样的字符常量,如果:

int i = '/13a';

cout<< i << endl ;

会发现输出了:2913

为什么呢?

原来'/13a'表示八进制,因此'/34' = 3*8 + 4 = 28;

可是'/13a'中的a又代表了什么呢?八进制只能用0~7,a 又怎么解释呢?

原来对于0~7以外的字符,编译器解释为:

'/13'和'a'的结合。

'/13'是0x0B, 'a'是0x61;

那么i的值其实就是0x0B61了。 

### AB PLC 支持的数据类型 AB PLC(Allen-Bradley Programmable Logic Controller)支持多种数据类型和数据结构,这些数据类型涵盖了基本的数值类型到复杂的数组和字符串。以下是常见的 AB PLC 数据类型列表: #### 基本数据类型 1. **BOOL (Boolean)** 表示逻辑值 `TRUE` 或 `FALSE`,通常用于开关状态或条件判断[^1]。 2. **SINT (Signed Integer, 8-bit)** 范围为 `-128` 到 `127` 的有符号整数,适用于较小范围的数值计算。 3. **USINT (Unsigned Integer, 8-bit)** 范围为 `0` 到 `255` 的无符号整数,常用于计数器或其他非负数值场景[^1]。 4. **INT (Signed Integer, 16-bit)** 范围为 `-32768` 到 `32767` 的有符号整数,广泛应用于一般的整数运算[^1]。 5. **UINT (Unsigned Integer, 16-bit)** 范围为 `0` 到 `65535` 的无符号整数,适合较大的非负数值处理[^1]。 6. **DINT (Double Signed Integer, 32-bit)** 范围为 `-2147483648` 到 `2147483647` 的双字节有符号整数,适用于大范围的数值计算[^1]。 7. **UDINT (Unsigned Double Integer, 32-bit)** 范围为 `0` 到 `4294967295` 的双字节无符号整数,常见于需要非常大数值的应用场合[^1]。 8. **REAL (Floating Point, 32-bit IEEE 754)** 单精度浮点数,范围约为 `±3.4E+/-38`,具有约七位十进制的有效数字,适合作为高精度需求下的替代方案[^1]。 9. **LREAL (Long Floating Point, 64-bit IEEE 754)** 双精度浮点数,范围约为 `±1.7E+/-308`,具有约十五位十进制的有效数字,特别适合科学计算和其他对精度要求极高的应用环境。 --- #### 复杂数据类型 1. **STRING** 字符串类型,长度固定或动态分配,可用于存储文本信息。其最大长度取决于具体的控制系统配置[^1]。 2. **ARRAY** 数组是一种集合形式的数据结构,允许将多个相同类型的变量组合在一起并按索引访问。例如,定义一个包含十个 INT 类型元素的数组: ```plc MyArray : ARRAY[1..10] OF INT; ``` 3. **STRUCTURE / UDT (User Defined Type)** 用户自定义数据类型,通过将不同类型的数据成员封装在一个整体中来创建新的复合数据类型。这有助于提高程序的模块化程度和可维护性。例如: ```plc TYPE EmployeeRecord : STRUCT Name : STRING[50]; Age : UINT; Salary : REAL; END_STRUCT END_TYPE ``` 4. **DATE 和 TIME** 提供日期 (`DATE`) 和时间戳 (`TIME`) 功能,便于记录事件发生的时间或者执行定时任务。某些版本还可能扩展至更精确的时间表示方式如 `DATETIME`[^1]。 5. **TIMER 和 COUNTER** 定时器和计数器作为专用功能块存在,分别用来测量持续时间和累积脉冲数量,在工业自动化领域极为重要[^1]。 --- #### 特殊用途数据类型 对于特定应用场景,还可以利用其他一些特殊设计的数据类别,比如枚举类型 (`ENUM`) 来简化代码逻辑表达;或是借助指针机制实现内存地址间接寻址等功能增强灵活性。 ```python # Python 示例展示如何通过 pylogix 访问 DINT 类型变量 from pylogix import PLC with PLC() as comm: comm.IPAddress = '192.168.1.10' response = comm.Read('MyDintVariable') if not response.Status == 'Success': print(f'Error reading variable: {response}') else: print(f'DINT Value is {response.Value}') ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值