(delphi11最新学习资料) Object Pascal 学习笔记---第2章第六节(类型转换)

Object Pascal 学习笔记,Delphi 11 编程语言的完整介绍 作者: Marco Cantu 笔记:豆豆爸

2.6 类型转换和类型转换

​ 正如我们所见,不能将一种数据类型的变量赋值给另一种类型的变量。原因在于,根据数据的实际表示,你可能会得到毫无意义的结果。

​ 现在,并非每种数据类型都是如此。例如,数值类型总是可以安全地升级。这里的 "提升 "是指你总是可以安全地将一个值赋值给一个具有更大表示量的类型。因此,你可以将一个字(word)赋值给一个整数(integer),将一个整数赋值给一个 Int64 的值。与此相反的操作称为 “降级”,编译器允许这种操作,但可能会发出警告,因为你可能只会得到部分数据。其他自动转换只有一种方式: 例如,可以将整数赋值给浮点数,但相反的操作是非法的。

​ 在某些情况下,您想要更改值的类型,并且该操作是有意义的。当您需要执行此操作时,有两种选择。一种是执行直接类型转换,这将复制物理数据,并可能导致正确的转换,或者不进行转换,具体取决于类型及其值。当你执行类型转换时,你是在告诉编译器“我知道我在做什幺,让我去做吧”。如果你使用类型转换,但不确定你在做什幺,你可能会遇到麻烦,因为你失去了编译器类型检查的安全网。

​ 类型转换使用简单的函数符号,目的数据类型的名称用作函数:

var
  I: Integer;
  C: Char;
  B: Boolean;
begin
  I := Integer('X');
  C := Char(I);
  B := Boolean(I);

​ 您可以在具有相同大小(即表示数据的字节数相同–与上面的代码片段不同!)的数据类型之间安全地进行类型转换。在序数类型之间进行类型转换通常是安全的,但只要你知道自己在做什么,也可以在指针类型(以及对象)之间进行类型转换。

​ 直接类型转换是一种危险的编程实践,因为它允许你访问一个值,就好像它代表了其他东西一样。由于数据类型的内部表示通常并不匹配(甚至可能根据目标平台的不同而发生变化),因此您有可能意外地产生难以追踪的错误。因此,一般应避免类型转换。

​ 将变量赋值给不同类型变量的另一种方法是使用类型转换函数。下面列出了一系列可以在各种基本类型之间进行转换的函数(我已经在本章的演示中使用了其中一些函数):

  • Chr:将序数数转换为字符。

  • Ord:将序数类型的值转换为指示其顺序的数字。

  • Round:将实数类型的值转换为整数类型的值,四舍五入其值(还请参见下面的注释)。

  • Trunc:将实数类型的值截断为整数类型的值。

  • Int:返回浮点值参数的整数部分。

  • FloatToDecimal:将浮点值转换为包含其十进制表示的记录(指数、数字、符号)。

  • FloatToStr:使用默认格式将浮点值转换为其字符串表示。

  • StrToFloat:将字符串转换为浮点值。

注解: Round 函数的实现基于 CPU 提供的本机实现。现代处理器通常采用所谓的“银行家舍入”方式,它根据中间值(例如 5.5 或 6.5)是否跟随奇数或偶数而上下舍入。还有其他舍入函数,如 RoundTo,可以让您更多地控制实际操作。

​ 正如本章前面提到的,其中一些转换函数也可以作为数据类型的直接操作使用(归功于类型助手机制)。虽然有像 IntToStr 这样的经典转换,但您可以对大多数数字类型应用 ToString 操作将其转换为字符串表示。有许多转换您可以直接应用于使用类型助手的变量,这应该是您首选的编码风格,而不是使用类型转换。

​ 其中一些例程适用于我们将在以下章节中讨论的数据类型。请注意,该表中不包括特殊类型(例如 TDateTime 或 Variant)的例程,也不包括专门用于格式化而非转换的例程,比如强大的 Format 和 FormatFloat 例程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/337057.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux中的共享内存

定义: 共享内存允许两个或者多个进程共享物理内存的同一块区域(通常被称为段)。由于一个共享内存段会称为一个进程用户空间的一部分,因此这种 IPC 机制无需内核介入。所有需要做的就是让一个进程将数 据复制进共享内存中&#xff…

web漏洞总结大全(基础)

前言 本文章是和cike_y师傅一起写的,cike_y博客:https://blog.csdn.net/weixin_53912233?typeblog 也欢迎大家对本文章进行补充和指正,共同维护这个项目,本文的github项目地址: https://github.com/baimao-box/Sum…

Golang 搭建 WebSocket 应用(八) - 完整代码

本文应该是本系列文章最后一篇了,前面留下的一些坑可能后面会再补充一下,但不在本系列文章中了。 整体架构 再来回顾一下我们的整体架构: 在我们的 demo 中,包含了以下几种角色: 客户端:一般是浏览器&am…

java枚举详细解释

枚举的基本认识 我们一般直接定义一个单独的枚举类 public enum 枚举类名{枚举项1,枚举项2,枚举项3 } 可以通过 枚举类名.枚举项 来访问该枚举项的 - 可以理解为 枚举项就是我们自己定义的一个数据类型,是独一无二的 接下来我们直接用一个例子来完全理解 加深理解 这里…

Linux-nginx(安装配置nginx、配置反向代理、Nginx配置负载均衡、动静分离)

关于代理 正向代理: 客户明确知道自己访问的网站是什么 隐藏客户端的信息 目录 关于代理 一、Nginx的安装与配置 1、安装依赖 2、安装nginx (1)上传压缩包到目录 /usr/nginx里面 (2)解压文件 (3&#xff09…

String在VS与Linux下的区别

目录 一、string的成员 1.VS 2.Linux 二、string的扩容机制 1. VS 2.Linux 一、string的成员 string是C标准库中的一个类模板,用于表示和操作字符串 string在 Windows 与 Linux 中的成员不是相同的 1.VS 4个成员:_str , _size , _capacity 和…

【一文详解】Java多线程和并发知识点详细总结【万字总结】

Java并发编程 并发编程的三个特性 原子性 一次操作或者多次操作,要么所有的操作全部都得到执行并且不会受到任何因素的干扰而中断,要么都不执行。 在 Java 中,可以借助synchronized、各种 Lock 以及各种原子类实现原子性。 synchronized…

MySQL(五)——多表查询

上期文章 MySQL(四)——约束 文章目录 上期文章多表关系一对多(多对一)多对多多表外键关系可视化一对一 多表查询概述笛卡尔积多表查询分类连接查询 内连接隐式内连接显式内连接 外连接左外连接右外连接 自连接联合查询 union&am…

python-基础篇-变量

文章目录 变量的基本使用目标01. 变量定义1) 变量演练1 —— iPython2) 变量演练 2 —— PyCharm3) 变量演练 3 —— 超市买苹果思考题 02. 变量的类型2.1 变量类型的演练 —— 个人信息2.2 变量的类型2.3 不同类型变量之间的计算1) **数字型变量** 之间可以直接计算2) **字符串…

Python基础第四篇(Python函数)

文章目录 一、函数介绍二、函数的定义三、函数的参数与返回值四、函数说明文档五、函数的嵌套六、变量域七、函数案例1.源代码2.读出结果 在程序设计领域,函数成为一个不可或缺的角色,它们为我们提供了精练、高效和易于管理的编程方式。本篇博客将带您深…

CentOS 7安装Java并配置环境

一、安装Java环境 1、检查系统是否安装Java [rootlocalhost ~]# java -version 2、更新系统软件包 [rootlocalhost ~]# yum update #遇到[y/n],选择y并回车,耐心等待下载完毕,之后系统会自动检验更新的软件包遇到 /var/run/yum.pid 已被锁定 /var/…

【动态规划】【数学】【C++算法】805 数组的均值分割

作者推荐 【动态规划】【数学】【C算法】18赛车 本文涉及知识点 动态规划 数学 805 数组的均值分割 给定你一个整数数组 nums 我们要将 nums 数组中的每个元素移动到 A 数组 或者 B 数组中,使得 A 数组和 B 数组不为空,并且 average(A) average(B)…

nuclei安装;linux上 以及使用教程

kali安装go环境_go1.17 kali安装-CSDN博客Ubuntu完美解决Github网站打不开问题 - 一抹烟霞 - 博客园 (cnblogs.com) All releases - The Go Programming Language 然但是上面两个我似乎都没用到网上的教程 也不适用 一个网不好 一个apt没找到包 然后我先试试了版本 结果 我的…

BGP Origin 属性控制选路试验

一、拓朴图: 二、配置步骤: 1、配置 IP 2、配置 IGP,我们这里用了静态,互相宣告了对端接口和 Loopback 0 3、配置 BGP 4、在 R1 上通过 BGP 宣告 1.1.1.1,查看 R2 的路由,发现两条 1.1.1.1 的路由&#x…

Vue中的组件

在应用程序的开发中,组件是不可缺少的。在Vue的使用中,同样也会用到组件。   vue组件的一般知识点:   1、组件的名字唯一;   2、组件以Html形式书写;   3、组件可以复用;   4、组件可以嵌套&…

postgresql(Windows)初始化数据库教程

省流:本文章内容讲的是如何初始化postgresql数据库环境,前提是已经安装好postgresql数据库,安装步骤参考postgresql(Windows)安装教程 # 开始:安装postgresql-12.14-2-windows-x64.exe完成后进行初始化数据…

gin中间件篇

1. 全局中间件 所有请求都经过此中间件 package mainimport ("fmt""time""github.com/gin-gonic/gin" )// 定义中间 func MiddleWare() gin.HandlerFunc {return func(c *gin.Context) {t : time.Now()fmt.Println("中间件开始执行了&quo…

《Linux高性能服务器编程》笔记04

Linux高性能服务器编程 本文是读书笔记,如有侵权,请联系删除。 参考 Linux高性能服务器编程源码: https://github.com/raichen/LinuxServerCodes 豆瓣: Linux高性能服务器编程 文章目录 Linux高性能服务器编程第09章I/O复用9.1 select系统调用9.2 po…

JVM之java内存区域[1](程序计数器、栈)

文章目录 版权声明零 运行时数据区一 程序计数器1.1 加载阶段1.2 执行阶段1.3 多线程情况 二 栈2.1 java虚拟机栈2.2 java虚拟机栈帧的组成2.2.1 局部变量表2.2.2 操作数栈2.2.3 帧数据 2.3 栈内存溢出2.4 设置帧大小2.5 本地方法栈 版权声明 本博客的内容基于我个人学习黑马程…

如何快速打开github

作为一个资深码农,怎么能不熟悉全球最大的同性交友社区——github呢,但头疼的是github有时能打开,有时打不开,这是怎么回事? 其实问题出在github.com解析DNS上,并不是需要FQ。下面提供一个方法,…
最新文章