Aracılığıyla paylaş


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, un 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:

  1. 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].
  2. 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.
  3. 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 BigIntegerayrıştırmak için daha yüksek değerler açıkça soneki kullanılarak n 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] .