Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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ğerlere 0x ve ikili değişmez değerlere ondalık sayılardan ayırt etmek için 0b ön ekleri eklenir.
Tamsayı değişmez değerleri bir tür soneki ve çarpan soneki içerebilir.
| Sonek | 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 |
kibibyte (10241) çarpanı | |
mb |
mebibayt (10242) çarpanı | |
gb |
gigibyte (10243) çarpanı | |
tb |
teribyte (10244) çarpanı | |
pb |
petibayt (10245) ç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
[int]türüyle gösterilebilirse, bu onun türüdür. - Aksi takdirde, değer
[long]türüyle gösterilebilirse, bu onun türüdür. - Aksi takdirde, değer
[decimal]türüyle gösterilebilirse, bu onun türüdür. - Aksi takdirde,
[double]türüyle temsil edilir.
Tür soneki olan bir tamsayı değişmez değeri için:
- Tür soneki
uve değer[uint]türüyle gösterilebilirse türü[uint]olur. - Tür soneki
uve değer[ulong]türüyle gösterilebilirse türü[ulong]olur. - 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, 1e2 değişmez değer 100 sayısal değere eşittir.
Gerçek değişmez değerlerin tür soneki ve çarpan soneki olabilir.
| Sonek | Anlam |
|---|---|
d |
ondalık veri türü |
kb |
kibibyte (10241) çarpanı |
mb |
mebibayt (10242) çarpanı |
gb |
gigibyte (10243) çarpanı |
tb |
teribyte (10244) çarpanı |
pb |
petibayt (10245) ç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, [float] değerin değişmez bir gösterimini desteklemez. Çift gerçek değişmez değer türü [double]. Ondalık gerçek değişmez değeri [decimal]türündedir.
Ondalık gerçek değişmez değerin kesir bölümünde sondaki sıfırlar önemlidir.
Bir [double] gerçek değişmez değerdeki üstel bölümün basamaklarının değeri desteklenen en düşük değerden küçükse, bu [double] gerçek değişmez değerin değeri 0'dır.
[decimal] gerçek değişmez değerdeki üstel bölümün basamaklarının değeri desteklenen en düşük değerden küçükse, bu değişmez değer yanlış biçimlendirilmiş olur. Bir [double] veya [decimal] gerçek değişmez değerdeki ü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 [long]türüyle 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 değeri 1, 1.2345e1L değeri 12 ve 1.2345e-5L değeri 0'dır; 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 100gbL yanlış biçimlendirilmiş, ancak değişmez 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ğeri 1gb soneki tarafından belirtilen [ushort] türü için izin verilenden daha büyük olduğundan değişmez değer us 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:
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 | On -da -lı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 | On -da -lı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 [bigint] soneki belirtilmişse ayrıştırmayı başarısız olmaktan çok n olarak döndürebilir. Bununla birlikte, işaret bitlerine [decimal] aralıkların bile üstünde 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-1döndürür, ancak 0xFFFFFFFFu 4294967295 [uint]::MaxValue döndürür.
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 0xFFFFs türü için çok büyük olduğundan [int16] ifadesi bir hata döndürür.
PowerShell 7.1 bunu -1 bir tür olan [int16] olarak yorumlar.
Sabit değere bir 0 ön ekinin alınması bunu atlar ve imzasız olarak kabul edilir.
Örneğin: 0b011111111.
[bigint] ve u sonekleri birleştirilemediğinden, n aralığındaki 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,
0xön ekini 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 bir sayı olarak yorumlanır.
1usgb gibi 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, 1gbus gibi 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 erdiğini ve GetType yönteminin nerede başladığı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
[decimal]. - Aksi halde,
[double]olarak 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
[double]olarak 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
[bigint]olarak ayrıştırabilirsiniz. - Onaltılık biçimler için, değer
[bigint]veya[int]aralığında olduğunda özgün davranışları korumak için özel durumlar kullanarak[long]ayrıştırın. - İkili veya onaltılık değilse,
[bigint]olarak normal olarak ayrıştırma.
- İkili biçimler için
- 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 için
[long]aralığının dışındaysa ayrıştırma başarısız olur. - Değer, temel 10 sayı için
[double]aralığının dışındaysa ayrıştırma başarısız olur. - Sabit değeri
nolarak ayrıştırmak için daha yüksek değerler açıkçaBigIntegersoneki kullanılarak 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. Mesela:
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 N sonekini kullanmanız gerekir.
PS> 111111111111111111111111111111111111111111111111111111n
111111111111111111111111111111111111111111111111111111
Ayrıca [ulong]::MaxValue ile [decimal]::MaxValue arasındaki 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 [double] olarak ayrıştırılır.
PowerShell