about_Numeric_Literals
Kısa açıklama
Bu makalede PowerShell'de sayısal değerlerin söz dizimi ve kullanımı açıklanmaktadır.
Uzun açıklama
İki tür sayısal değişmez değer vardır: tamsayı ve gerçek. Her ikisinde de tür ve çarpan sonekleri olabilir.
Tamsayı değişmez değerleri
Tamsayı değişmez değerleri ondalık, onaltılık veya ikili gösterimi olarak yazılabilir.
Onaltılık değişmez değerler ön eklidir 0x
ve ikili değişmez değerler ondalık sayılardan ayırt etmek için önek olarak 0b
eklenir.
Tamsayı değişmez değerleri bir tür soneki ve çarpan soneki içerebilir.
Soneki | Anlamı | Not |
---|---|---|
y |
imzalı bayt veri türü | PowerShell 6.2'ye eklendi |
uy |
imzasız bayt veri türü | PowerShell 6.2'ye eklendi |
s |
kısa veri türü | PowerShell 6.2'ye eklendi |
us |
imzasız kısa veri türü | PowerShell 6.2'ye eklendi |
l |
uzun veri türü | |
u |
imzasız int veya uzun veri türü | PowerShell 6.2'ye eklendi |
ul |
imzasız uzun veri türü | PowerShell 6.2'ye eklendi |
n |
BigInteger veri türü | PowerShell 7.0'a eklendi |
kb |
kilobayt çarpanı | |
mb |
megabayt çarpanı | |
gb |
gigabayt çarpanı | |
tb |
terabayt çarpanı | |
pb |
petabayt çarpanı |
Tamsayı değişmez değerinin türü değeri, tür soneki ve sayısal çarpan soneki tarafından belirlenir.
Tür soneki olmayan bir tamsayı değişmez değeri için:
- Değer türüyle
[int]
temsil edilebiliyorsa, bu onun türüdür. - Aksi takdirde, değer türüyle
[long]
temsil edilebiliyorsa, bu onun türüdür. - Aksi takdirde, değer türüyle
[decimal]
temsil edilebiliyorsa, bu onun türüdür. - Aksi takdirde, türüyle
[double]
temsil edilir.
Tür soneki olan bir tamsayı değişmez değeri için:
- Tür soneki ise
u
ve değer türle[uint]
gösterilebilirse türü olur[uint]
. - Tür soneki ise
u
ve değer türle[ulong]
gösterilebilirse türü olur[ulong]
. - Değeri belirtilen türle temsil edilebiliyorsa, türü bu olur.
- Aksi takdirde, bu değişmez değer yanlış biçimlendirilmiştir.
Gerçek değişmez değerler
Gerçek değişmez değerler yalnızca ondalık gösterimiyle yazılabilir. Bu gösterim, ondalık ayırıcıdan sonra kesirli değerler ve üstel bir bölüm kullanılarak bilimsel gösterim içerebilir.
Üstel bölüm bir 'e' ve ardından isteğe bağlı bir işaret (+/-) ve üssü temsil eden bir sayı içerir. Örneğin, değişmez değer 1e2
100 sayısal değerine eşittir.
Gerçek değişmez değerlerin tür soneki ve çarpan soneki olabilir.
Soneki | Anlamı |
---|---|
d |
ondalık veri türü |
kb |
kilobayt çarpanı |
mb |
megabayt çarpanı |
gb |
gigabayt çarpanı |
tb |
terabayt çarpanı |
pb |
petabayt çarpanı |
İki tür gerçek değişmez değer vardır: çift ve ondalık. Bunlar, sırasıyla ondalık türü son ekinin yokluğu veya iletişim durumuyla gösterilir. PowerShell bir değerin değişmez bir gösterimini [float]
desteklemez. Çift gerçek değişmez değer türüne [double]
sahiptir. Ondalık gerçek değişmez değeri türüne [decimal]
sahiptir.
Ondalık gerçek değişmez değerin kesir bölümünde sondaki sıfırlar önemlidir.
Üstel bölümün basamaklarının gerçek bir [double]
değişmez değerdeki değeri desteklenen en düşük değerden küçükse, bu [double]
gerçek değişmez değerin değeri 0'dır. Gerçek bir [decimal]
değişmez değerdeki üstel parça basamaklarının değeri desteklenen en düşük değerden küçükse, bu değişmez değer yanlış biçimlendirilmiş olur. Bir veya [decimal]
gerçek değişmez değerdeki [double]
üstel parça basamaklarının değeri desteklenen en yüksek değerden büyükse, bu değişmez değer yanlış biçimlendirilmiş olur.
Not
Söz dizimi, çift gerçek değişmez değerin uzun tür son ekine sahip olmasına izin verir.
PowerShell bu durumu, değeri türüyle [long]
temsil edilen bir tamsayı değişmez değeri olarak değerlendirir. Bu özellik, PowerShell'in önceki sürümleriyle geriye dönük uyumluluk için korunmaktadır. Ancak programcıların bu formun tamsayı değişmez değerlerini kullanmaları önerilmez çünkü değişmez değerin gerçek değerini kolayca gizleyebilirler. Örneğin, 1.2L
1 değerine sahiptir, 1.2345e1L
12 değerine sahiptir ve 1.2345e-5L
0 değerine sahiptir; bunların hiçbiri hemen belirgin değildir.
Sayısal çarpanlar
Kolaylık sağlamak için, tamsayı ve gerçek değişmez değerler, 2'nin yaygın olarak kullanılan güçlerinden birini gösteren sayısal bir çarpan içerebilir. Sayısal çarpan, büyük veya küçük harflerin herhangi bir bileşiminde yazılabilir.
Çarpan sonekleri herhangi bir tür soneki ile birlikte kullanılabilir, ancak tür soneki sonrasında mevcut olmalıdır. Örneğin, değişmez değer 100gbL
yanlış biçimlendirilmiş, ancak değişmez değer 100Lgb
geçerli.
Çarpan, son ekin belirttiği sayısal tür için olası değerleri aşan bir değer oluşturursa, değişmez değer yanlış biçimlendirilmiş olur. Örneğin, 1usgb
değer 1gb
sonek tarafından us
belirtilen tür için [ushort]
izin verilenden daha büyük olduğundan değişmez değer yanlış biçimlendirilmiştir.
Çarpan örnekleri
PS> 1kb
1024
PS> 1.30Dmb
1363148.80
PS> 0x10Gb
17179869184
PS> 1.4e23tb
1.5393162788864E+35
PS> 0x12Lpb
20266198323167232
Sayısal tür hızlandırıcıları
PowerShell aşağıdaki tür hızlandırıcılarını destekler:
Hızlandırıcı | Not | Açıklama |
---|---|---|
[byte] |
Bayt (imzasız) | |
[sbyte] |
Bayt (imzalı) | |
[Int16] |
16 bit tamsayı | |
[short] |
diğer adı [int16] |
16 bit tamsayı |
[UInt16] |
16 bit tamsayı (işaretsiz) | |
[ushort] |
diğer adı [uint16] |
16 bit tamsayı (işaretsiz) |
[Int32] |
32 bit tamsayı | |
[int] |
diğer adı [int32] |
32 bit tamsayı |
[UInt32] |
32 bit tamsayı (işaretsiz) | |
[uint] |
diğer adı [uint32] |
32 bit tamsayı (işaretsiz) |
[Int64] |
64 bit tamsayı | |
[long] |
diğer adı [int64] |
64 bit tamsayı |
[UInt64] |
64 bit tamsayı (işaretsiz) | |
[ulong] |
diğer adı [uint64] |
64 bit tamsayı (işaretsiz) |
[bigint] |
Bkz. BigInteger Yapısı | |
[single] |
Tek duyarlıklı kayan nokta | |
[float] |
diğer adı [single] |
Tek duyarlıklı kayan nokta |
[double] |
Çift duyarlıklı kayan nokta | |
[decimal] |
128 bit kayan nokta |
Not
PowerShell 6.2'ye aşağıdaki tür hızlandırıcıları eklendi: [short]
, [ushort]
, [uint]
, [ulong]
.
Örnekler
Aşağıdaki tabloda sayısal değişmez değerlerin çeşitli örnekleri yer alır ve bunların türü ve değeri listelenir:
Sayı | Tür | Değer |
---|---|---|
100 | Int32 | 100 |
100u | UInt32 | 100 |
100D | Ondalık | 100 |
100l | Int64 | 100 |
100uL | UInt64 | 100 |
100us | UInt16 | 100 |
100uy | Bayt | 100 |
100y | SByte | 100 |
1e2 | Çift | 100 |
1.e2 | Çift | 100 |
0x1e2 | Int32 | 482 |
0x1e2L | Int64 | 482 |
0x1e2D | Int32 | 7725 |
482D | Ondalık | 482 |
482gb | Int64 | 517543559168 |
482ngb | BigInteger | 517543559168 |
0x1e2lgb | Int64 | 517543559168 |
0b1011011 | Int32 | 91 |
0xFFFF'ler | Int16 | -1 |
0xffffffff | Int32 | -1 |
-0xffffffff | Int32 | 1 |
0xFFFFFFFFu | UInt32 | 4294967295 |
İkili veya onaltılık sayılarla çalışma
Aşırı büyük ikili veya onaltılık değişmez değerler, yalnızca ve yalnızca sonek belirtilirse n
ayrıştırma başarısızlığı yerine olarak [bigint]
döndürülebilir. Bununla birlikte, işaret bitlerine hala çift [decimal]
aralıkların üzerinde saygı gösterilir:
- İkili dize 8 bit uzunluğunda bir katıysa, en yüksek bit işaret biti olarak değerlendirilir.
- Uzunluğu 8'in katı olan bir onaltılık dizede ilk basamak 8 veya daha yüksekse, sayı negatif olarak değerlendirilir.
İkili ve onaltılık değişmez değerlerde işaretsiz bir sonek belirtmek, işaret bitlerini yoksayar. Örneğin, 0xFFFFFFFF
döndürür, ancak 0xFFFFFFFFu
4294967295 değerini döndürür [uint]::MaxValue
-1
.
PowerShell 7.1'de, onaltılık değişmez değerde tür soneki kullanıldığında artık bu tür imzalı bir değer döndürülüyor. Örneğin, PowerShell 7.0'da pozitif değer bir tür için çok büyük olduğundan ifade 0xFFFFs
bir [int16]
hata döndürür.
PowerShell 7.1 bunu bir [int16]
tür olarak -1
yorumlar.
ile sabit değer 0
ön ekinin alınması bunu atlar ve imzasız olarak kabul edilir.
Örneğin: 0b011111111
. Ve sonekleri birleştirilemediğinden, u
n
aralıktaki [bigint]
değişmez değerlerle çalışırken bu gerekli olabilir.
Ayrıca ön ekini kullanarak -
ikili ve onaltılık değişmez değerleri de olumsuzlayabilirsiniz. bu, işaret bitlerine izin verildiğinden pozitif bir sayıya neden olabilir.
BigInteger son ekli rakamlar için işaret bitleri kabul edilir:
- BigInteger-sonekli onaltılık değer, herhangi bir değişmez değerin yüksek bitini, işaret biti olarak 8 karakterden oluşan uzunluk katlarıyla ele alır. Uzunluk ön ekini
0x
veya son ekleri içermez. - BigInteger-suffixed ikilisi, 96 ve 128 karakterde ve sonrasında her 8 karakterde işaret bitlerini kabul eder.
Sayısal tür dönüştürme
Dizeler sayıya dönüştürüldüğünde, ek onaltılık biçim göstergeleri desteklenir. Bu ek biçimler değişmez değer olarak tanınmaz.
[int] '0xF' -eq 0xF
[int] '&hF' -eq 0xF
[int] '#F' -eq 0xF
[int] '0b1111' -eq 0b1111
[int] '0b1111' -eq 15
Sayısal değişmez değerler gibi görünen komutlar
Geçerli bir sayısal değişmez değer gibi görünen tüm komutlar çağrı işleci ()&
kullanılarak yürütülmelidir, aksi takdirde sayı olarak yorumlanır. gibi 1usgb
geçerli söz dizimine sahip hatalı biçimlendirilmiş değişmez değerler aşağıdaki hataya neden olur:
PS> 1usgb
At line:1 char:6
+ 1usgb
+ ~
The numeric constant 1usgb is not valid.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : BadNumericConstant
Ancak, gibi 1gbus
geçersiz söz dizimine sahip hatalı biçimlendirilmiş değişmez değerler standart bir çıplak dize olarak yorumlanır ve komutların çağrılabileceği bağlamlarda geçerli bir komut adı olarak yorumlanabilir.
Sayısal nesnelerin özelliklerine ve yöntemlerine erişme
Sayısal değişmez değerin bir üyesine erişmek için, değişmez değeri parantez içine almanız gereken durumlar vardır.
- Değişmez değerin ondalık noktası yok
- Değişmez değerde ondalık ayırıcıdan sonra basamak yok
- Değişmez değerde sonek yok
Örneğin, aşağıdaki örnek başarısız olur:
PS> 2.GetType().Name
At line:1 char:11
+ 2.GetType().Name
+ ~
An expression was expected after '('.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ExpectedExpression
Aşağıdaki örnekler çalışır:
PS> 2uL.GetType().Name
UInt64
PS> 1.234.GetType().Name
Double
PS> (2).GetType().Name
Int32
PowerShell ayrıştırıcısı sayısal değişmez değerin nerede sona ereceğini ve GetType yönteminin nerede başlayacağını belirleyebildiğinden, ilk iki örnek değişmez değeri parantez içine almadan çalışır.
PowerShell sayısal değişmez değerleri nasıl ayrıştırıyor?
PowerShell v7.0, yeni özellikleri etkinleştirmek için sayısal değişmez değerlerin ayrıştırma şeklini değiştirdi.
Gerçek sayısal değişmez değerleri ayrıştırma
Değişmez değer bir ondalık nokta veya e-gösterimi içeriyorsa, değişmez değer dizesi gerçek bir sayı olarak ayrıştırılır.
- Ondalık sonek mevcutsa doğrudan içine .
[decimal]
- Aksi halde, olarak
[Double]
ayrıştırın ve değere çarpan uygulayın. Ardından tür soneklerini denetleyin ve uygun türe dönüştürmeyi deneme. - Dizenin tür soneki yoksa olarak
[Double]
ayrıştırın.
Tamsayı sayısal değişmez değerlerini ayrıştırma
Tamsayı türü değişmez değerleri aşağıdaki adımlar kullanılarak ayrıştırılır:
- Radix biçimini belirleme
- İkili biçimler için olarak ayrıştırabilirsiniz
[BigInteger]
. - Onaltılık biçimler için, değer veya
[long]
aralığında olduğunda özgün davranışları korumak için özel casies kullanarak ayrıştırın.[BigInteger]
[int]
- İkili veya onaltılık değilse, normal olarak olarak ayrıştır
[BigInteger]
.
- İkili biçimler için olarak ayrıştırabilirsiniz
- Tür sınırlarının taşma olmadan uygun şekilde denetlenebilmesini sağlamak için atamaları denemeden önce çarpan değerini uygulayın.
- Tür soneklerini denetleyin.
- Tür sınırlarını denetleyin ve bu türe ayrıştırmaya çalışır.
- Sonek kullanılmazsa, değer aşağıdaki sırada sınırlarla denetlenir ve bu da ilk başarılı testin sayının türünü belirlemesine neden olur.
[int]
[long]
[decimal]
(yalnızca temel 10 değişmez değer)[double]
(yalnızca temel 10 değişmez değer)
- Değer onaltılık ve ikili sayılar aralığının
[long]
dışındaysa ayrıştırma başarısız olur. - Değer, temel 10 sayı aralığının
[double]
dışındaysa ayrıştırma başarısız olur. - Sabit değeri olarak
BigInteger
ayrıştırmak için daha yüksek değerler açıkça soneki kullanılarakn
yazılmalıdır.
Büyük değer değişmez değerlerini ayrıştırma
Daha önce, daha yüksek tamsayı değerleri başka bir türe dönüştürülmeden önce çift olarak ayrıştırılıyordu. Bu, daha yüksek aralıklarda duyarlık kaybına neden olur. Örneğin:
PS> [bigint]111111111111111111111111111111111111111111111111111111
111111111111111100905595216014112456735339620444667904
Bu sorundan kaçınmak için değerleri dize olarak yazmanız ve sonra dönüştürmeniz gerekiyordu:
PS> [bigint]'111111111111111111111111111111111111111111111111111111'
111111111111111111111111111111111111111111111111111111
PowerShell 7.0'da son eki kullanmanız N
gerekir.
PS> 111111111111111111111111111111111111111111111111111111n
111111111111111111111111111111111111111111111111111111
Ayrıca ve arasındaki [ulong]::MaxValue
[decimal]::MaxValue
değerler, doğruluğu korumak için ondalık sonek D
kullanılarak belirtilmelidir. Sonek olmadan, bu değerler gerçek ayrıştırma modu kullanılarak ayrıştırılır [Double]
.
PowerShell
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin