[玩转系统] 关于数字文字
作者:精品下载站 日期:2024-12-14 02:21:24 浏览:14 分类:玩电脑
关于数字文字
简短描述
本文介绍 PowerShell 中数值的语法和用法。
详细描述
有两种数字文字:整数和实数。两者都可以有类型和乘数后缀。
整数文字
整数文字可以用十进制、十六进制或二进制表示法书写。十六进制文字以 0x
为前缀,二进制文字以 0b
为前缀,以区别于十进制数字。
整数文字可以具有类型后缀和乘数后缀。
y
signed byte data type
Added in PowerShell 6.2
uy
unsigned byte data type
Added in PowerShell 6.2
s
short data type
Added in PowerShell 6.2
us
unsigned short data type
Added in PowerShell 6.2
l
long data type
u
unsigned int or long data type
Added in PowerShell 6.2
ul
unsigned long data type
Added in PowerShell 6.2
n
BigInteger data type
Added in PowerShell 7.0
kb
kilobyte multiplier
mb
megabyte multiplier
gb
gigabyte multiplier
tb
terabyte multiplier
pb
petabyte multiplier
整数文字的类型由其值、类型后缀和数字乘数后缀确定。
对于没有类型后缀的整数文字:
- 如果该值可以用类型
[int]
表示,那就是它的类型。 - 否则,如果该值可以用
[long]
类型表示,那就是它的类型。 - 否则,如果该值可以用
[decimal]
类型表示,那就是它的类型。 - 否则,它由类型
[double]
表示。
对于带有类型后缀的整数文字:
- 如果类型后缀为
u
并且该值可以用[uint]
类型表示,则其类型为[uint]
。 - 如果类型后缀为
u
并且该值可以用[ulong]
类型表示,则其类型为[ulong]
。 - 如果它的值可以用指定的类型表示,那么这就是它的类型。
- 否则,该文字的格式是错误的。
真实文字
实数只能用十进制表示。此表示法可以包括小数点后面的分数值和使用指数部分的科学记数法。
指数部分包括“e”,后跟可选符号 (+/-) 和代表指数的数字。例如,文字值 1e2
等于数值 100。
实数可以有类型后缀和乘数后缀。
d
小数数据类型
kb
千字节乘数
mb
兆字节乘数
gb
千兆字节乘数
tb
太字节乘数
pb
拍字节乘数
实数有两种:双精度型和十进制型。这些分别通过十进制类型后缀的不存在或存在来指示。 PowerShell 不支持 [float]
值的文字表示。双实数文字的类型为 [double]
。十进制实数文字的类型为 [decimal]
。十进制实数文字的小数部分中的尾随零很重要。
如果 [double]
实数中指数部分的数字值小于支持的最小值,则该 [double]
实数的值为 0。 [decimal]
实数中指数部分的数字值小于支持的最小值,该文字格式错误。如果 [double]
或 [decimal]
实数文字中指数部分的数字值大于支持的最大值,则该文字格式错误。
笔记
该语法允许双实数文字具有长类型后缀。 PowerShell 将此情况视为整数文字,其值由类型 [long]
表示。保留此功能是为了向后兼容早期版本的 PowerShell。但是,不鼓励程序员使用这种形式的整数文字,因为它们很容易掩盖文字的实际值。例如,1.2L
的值为 1,1.2345e1L
的值为 12,1.2345e-5L
的值为 0,这些值都不是立即的明显的。
数字乘数
为了方便起见,整数和实数文字可以包含数字乘数,它表示一组常用的 2 的幂中的一个。数字乘数可以用大写或小写字母的任意组合编写。
乘数后缀可以与任何类型后缀结合使用,但必须出现在类型后缀之后。例如,文字 100gbL
格式错误,但文字 100Lgb
有效。
如果乘法器创建的值超出后缀指定的数字类型的可能值,则文字格式错误。例如,文字 1usgb
格式错误,因为值 1gb
大于 [ushort]
类型所允许的值。代码>我们后缀。
乘数示例
PS> 1kb
1024
PS> 1.30Dmb
1363148.80
PS> 0x10Gb
17179869184
PS> 1.4e23tb
1.5393162788864E+35
PS> 0x12Lpb
20266198323167232
数字类型加速器
PowerShell 支持以下类型加速器:
[byte]
Byte (unsigned)
[sbyte]
Byte (signed)
[Int16]
16-bit integer
[short]
alias for [int16]
16-bit integer
[UInt16]
16-bit integer (unsigned)
[ushort]
alias for [uint16]
16-bit integer (unsigned)
[Int32]
32-bit integer
[int]
alias for [int32]
32-bit integer
[UInt32]
32-bit integer (unsigned)
[uint]
alias for [uint32]
32-bit integer (unsigned)
[Int64]
64-bit integer
[long]
alias for [int64]
64-bit integer
[UInt64]
64-bit integer (unsigned)
[ulong]
alias for [uint64]
64-bit integer (unsigned)
[bigint]
See BigInteger Struct
[single]
Single precision floating point
[float]
alias for [single]
Single precision floating point
[double]
Double precision floating point
[decimal]
128-bit floating point
笔记
PowerShell 6.2 中添加了以下类型加速器:[short]
、[ushort]
、[uint]
、[ulong]
。
示例
下表包含数字文字的几个示例并列出了它们的类型和值:
使用二进制或十六进制数字
当且仅当指定了 n
后缀时,过大的二进制或十六进制文字可以作为 [bigint]
返回,而不是导致解析失败。然而,即使在 [decimal]
范围之上,符号位仍然受到尊重:
- 如果二进制字符串的长度是 8 位的某个倍数,则最高位将被视为符号位。
- 如果长度为 8 倍数的十六进制字符串的第一个数字为 8 或更高,则该数字被视为负数。
在二进制和十六进制文字上指定无符号后缀会忽略符号位。例如,0xFFFFFFFF
返回 -1
,但 0xFFFFFFFFu
返回 [uint]::MaxValue
4294967295。
在 PowerShell 7.1 中,在十六进制文字上使用类型后缀现在会返回该类型的有符号值。例如,在 PowerShell 7.0 中,表达式 0xFFFFs
返回错误,因为正值对于 [int16]
类型来说太大。 PowerShell 7.1 将此解释为 -1
,即 [int16]
类型。
在文字前面加上 0
将绕过此问题并被视为无符号。例如:0b011111111
。当使用 [bigint]
范围内的文字时,这可能是必要的,因为 u
和 n
后缀无法组合。
您还可以使用 -
前缀对二进制和十六进制文字取反。由于允许符号位,因此这可能会导致正数。
BigInteger 后缀的数字接受符号位:
- 以 BigInteger 为后缀的十六进制将任何长度为 8 个字符倍数的文字的高位视为符号位。长度不包括
0x
前缀或任何后缀。 - 以 BigInteger 为后缀的二进制文件接受第 96 个和 128 个字符处以及之后每 8 个字符处的符号位。
数值类型转换
当字符串转换为数字时,支持附加的十六进制格式指示符。这些附加格式不会被识别为文字。
[int] '0xF' -eq 0xF
[int] '&hF' -eq 0xF
[int] '#F' -eq 0xF
[int] '0b1111' -eq 0b1111
[int] '0b1111' -eq 15
看起来像数字文字的命令
任何看起来像有效数字文字的命令都必须使用调用运算符 (&
) 执行,否则它会被解释为数字。具有有效语法(如 1usgb
)的格式错误的文字将导致以下错误:
PS> 1usgb
At line:1 char:6
+ 1usgb
+ ~
The numeric constant 1usgb is not valid.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : BadNumericConstant
但是,具有无效语法(例如 1gbus
)的格式错误文字将被解释为标准裸字符串,并且可以在可能调用命令的上下文中解释为有效命令名称。
访问数值对象的属性和方法
要访问数字文字的成员,有时需要将文字括在括号中。
- 文字没有小数点
- 文字小数点后没有任何数字
- 文字没有后缀
例如,以下示例失败:
PS> 2.GetType().Name
At line:1 char:11
+ 2.GetType().Name
+ ~
An expression was expected after '('.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ExpectedExpression
以下示例有效:
PS> 2uL.GetType().Name
UInt64
PS> 1.234.GetType().Name
Double
PS> (2).GetType().Name
Int32
前两个示例不需要将文字值括在括号中,因为 PowerShell 解析器可以确定数字文字的结束位置和 GetType 方法的开始位置。
PowerShell 如何解析数字文字
PowerShell v7.0 更改了解析数字文字的方式以启用新功能。
解析真实的数字文字
如果文字包含小数点或电子表示法,则文字字符串将被解析为实数。
- 如果存在小数后缀,则直接进入
[decimal]
。 - 否则,解析为
[Double]
并对值应用乘数。然后检查类型后缀并尝试转换为适当的类型。 - 如果字符串没有类型后缀,则解析为
[Double]
。
解析整数数字文字
使用以下步骤解析整数类型文字:
确定基数格式
- 对于二进制格式,解析为
[BigInteger]
。
- 对于二进制格式,解析为
- 对于十六进制格式,当值位于
[int]
或[long]
中时,使用特殊的 casies 解析为[BigInteger]
以保留原始行为范围。 - 如果既不是二进制也不是十六进制,则通常解析为
[BigInteger]
。 - 在尝试任何强制转换之前应用乘数值,以确保可以正确检查类型边界而不会溢出。
检查类型后缀。
- 检查类型边界并尝试解析为该类型。
如果不使用后缀,则按以下顺序对值进行边界检查,从而导致第一次成功的测试确定数字的类型。
[int]
[十进制]
(仅限以 10 为基数的文字)[double]
(仅限以 10 为基数的文字)- 如果该值超出十六进制和二进制数的
[long]
范围,则解析失败。 - 如果该值超出以 10 为基数的
[double]
范围,则解析失败。 - 必须使用
n
后缀显式写入更高的值,才能将文字解析为BigInteger
。
[long]
解析大值文字
以前,较高的整数值在转换为任何其他类型之前会被解析为 double。这会导致较高范围内的精度损失。例如:
PS> [bigint]111111111111111111111111111111111111111111111111111111
111111111111111100905595216014112456735339620444667904
为了避免这个问题,您必须将值写入字符串,然后将它们转换:
PS> [bigint]'111111111111111111111111111111111111111111111111111111'
111111111111111111111111111111111111111111111111111111
在 PowerShell 7.0 中,您必须使用 N
后缀。
PS> 111111111111111111111111111111111111111111111111111111n
111111111111111111111111111111111111111111111111111111
此外,[ulong]::MaxValue
和 [decimal]::MaxValue
之间的值应使用小数后缀 D
表示,以保持准确性。如果没有后缀,这些值将使用实数解析模式解析为 [Double]
。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag