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
PowerShell'de aritmetik gerçekleştiren işleçleri açıklar.
Uzun açıklama
Aritmetik işleçler sayısal değerleri hesaplar. Değerleri eklemek, çıkarmak, çarpmak ve bölme işleminin kalan kısmını (modül) hesaplamak için bir veya daha fazla aritmetik işleç kullanabilirsiniz.
Toplama işleci (+) ve çarpma işleci (*) dizeler, diziler ve karma tablolarda da çalışır. Toplama işleci girişi birleştirir.
Çarpma işleci girişin birden çok kopyasını döndürür. Bir aritmetik deyimde nesne türlerini bile karıştırabilirsiniz. deyimini değerlendirmek için kullanılan yöntem, ifadedeki en soldaki nesnenin türüne göre belirlenir.
PowerShell 2.0'da başlayarak, tüm aritmetik işleçler 64 bit sayılar üzerinde çalışır.
PowerShell 3.0'dan başlayarak, PowerShell'de bit tabanlı aritmetiği desteklemek için -shr (shift-right) ve -shl (shift-left) eklenir. Bit düzeyinde işleçler yalnızca tamsayı türlerinde çalışır.
PowerShell aşağıdaki aritmetik işleçleri destekler:
Toplama (
+) - Sayı ekler, dizeleri, dizileri ve karma tabloları birleştirir6 + 2 # result = 8 "file" + "name" # result = "filename" @(1, "one") + @(2.0, "two") # result = @(1, "one", 2.0, "two") @{"one" = 1} + @{"two" = 2} # result = @{"one" = 1; "two" = 2}Çıkarma (
-) - Sayıları çıkarır veya çıkarır6 - 2 # result = 4 - -6 # result = 6 (Get-Date).AddDays(-1) # Yesterday's dateÇarpma (
*) - Sayıları çarpma veya dizeleri ve dizileri belirtilen sayıda kopyalama6 * 2 # result = 12 @("!") * 4 # result = @("!","!","!","!") "!" * 3 # result = "!!!"Bölme (
/) - Sayıları böler6 / 2 # result = 3Modulus (
%) - bölme işleminin geri kalanını döndürür.7 % 2 # result = 1Bit Düzeyinde AND (
-band)5 -band 3 # result = 1Bit Düzeyinde DEĞİl (
-bnot)-bnot 5 # result = -6Bit Düzeyinde OR (
-bor)5 -bor 0x03 # result = 7Bit Düzeyinde XOR (
-bxor)5 -bxor 3 # result = 6Bitleri sola kaydırıyor (
-shl)102 -shl 2 # result = 408Bitleri sağa kaydırıyor (
-shr)102 -shr 2 # result = 25
İŞLEÇ ÖNCELIĞI
PowerShell aritmetik işleçleri aşağıdaki sırayla işler:
| Öncelik | Operatör | Açıklama |
|---|---|---|
| 1 | () |
Parantez |
| 2 | - |
Negatif bir sayı veya birli işleç için |
| 3 |
*, /, % |
Çarpma ve bölme için |
| 4 |
+, - |
Toplama ve çıkarma için |
| 5 |
-band, -bnot |
Bit düzeyinde işlemler için |
| 5 |
-bor, -bxor |
Bit düzeyinde işlemler için |
| 5 |
-shr, -shl |
Bit düzeyinde işlemler için |
PowerShell, ifadeleri soldan sağa öncelik kurallarına göre işler. Aşağıdaki örneklerde öncelik kurallarının etkisi gösterilmektedir:
3+6/3*4 # result = 11
3+6/(3*4) # result = 3.5
(3+6)/3*4 # result = 12
PowerShell'in ifadeleri değerlendirme sırası, kullandığınız diğer programlama ve betik dillerinden farklı olabilir. Aşağıdaki örnekte karmaşık bir atama deyimi gösterilmektedir.
$a = 0
$b = @(1,2)
$c = @(-1,-2)
$b[$a] = $c[$a++]
Bu örnekte, $a++ ifadesi $b[$a]önce değerlendirilir.
$a++ değerlendirmek, $adeyiminde kullanıldıktan sonra ancak $c[$a++]kullanılmadan önce $b[$a] değerini değiştirir.
$a içindeki $b[$a] değişkeni 1değil 0eşittir. Bu nedenle, deyimi $b[1]değil $b[0]bir değer atar.
Yukarıdaki kod aşağıdakilerle eşdeğerdir:
$a = 0
$b = @(1,2)
$c = @(-1,-2)
$tmp = $c[$a]
$a = $a + 1
$b[$a] = $tmp
BÖLME VE YUVARLAMA
Bölme işleminin bölümü bir tamsayı olduğunda, PowerShell değeri en yakın tamsayıya yuvarlar. değer .5olduğunda, en yakın çift tamsayıya yuvarlar.
Aşağıdaki örnek, en yakın çift tamsayıya yuvarlamanın etkisini gösterir.
PS> [int]( 5 / 2 ) # Result is rounded down
2
PS> [int]( 7 / 2 ) # Result is rounded up
4
Farklı yuvarlama davranışı elde etmek için [Math] sınıfını kullanabilirsiniz.
PS> [int][Math]::Round(5 / 2,[MidpointRounding]::AwayFromZero)
3
PS> [int][Math]::Ceiling(5 / 2)
3
PS> [int][Math]::Floor(5 / 2)
2
Daha fazla bilgi için math.round yöntemine bakın.
SONUCU BARıNDıRMAK IÇIN TÜR DÖNÜŞTÜRME
PowerShell, duyarlığı kaybetmeden sonucu en iyi ifade eden .NET sayısal türünü otomatik olarak seçer. Mesela:
2 + 3.1
(2).GetType().FullName
(2 + 3.1).GetType().FullName
5.1
System.Int32
System.Double
Bir işlemin sonucu tür için çok büyükse, aşağıdaki örnekte olduğu gibi sonucun türü sonucu barındıracak şekilde genişletilir:
(512MB).GetType().FullName
(512MB * 512MB).GetType().FullName
System.Int32
System.Double
Sonucun türü her zaman işlenenlerden biriyle aynı değildir. Aşağıdaki örnekte, negatif değer işaretsiz bir tamsayıya dönüştürülemez ve işaretsiz tamsayı Int32için atanamayacak kadar büyük:
([int32]::MinValue + [uint32]::MaxValue).GetType().FullName
System.Int64
Bu örnekte, Int64 her iki türü de barındırabilir.
System.Decimal türü bir özel durumdur. İşlenenlerden biri Ondalık türüne sahipse, sonuç Ondalık türü olur.
Ondalık değeri için fazla büyük sonuçlar hatadır.
PS> [decimal]::MaxValue
79228162514264337593543950335
PS> [decimal]::MaxValue + 1
RuntimeException: Value was either too large or too small for a Decimal.
Olası duyarlık kaybı
Tür aralığını aşan bir sonuç elde ettiğiniz her durumda, tür dönüştürme nedeniyle duyarlık kaybetme riskiyle karşı karşıyasınız. Örneğin, yeterince büyük bir [long] ve [int] eklemek işlenenlerin [double]dönüştürülmesiyle sonuçlanır. Bu örnekte, 9223372036854775807 bir [long] tamsayısının en büyük değeridir.
değere ekleme, [long]aralığını taştır.
PS> (9223372036854775807 + 2).GetType().FullName
System.Double
sonucun [ulong] ataması yanlış bir sonuç verir çünkü işlenenler önce [double] için zorunlu olarak alındı.
PS> [ulong](9223372036854775807 + 2)
9223372036854775808
Daha büyük değerin [ulong] olarak tanımlanması önce sorundan kaçınarak doğru sonucu verir.
PS> 9223372036854775807ul + 2
9223372036854775809
Ancak, [ulong] aralığını aşmak bir [double]ile sonuç verir.
PS> ([ulong]::MaxValue + 1).GetType().FullName
System.Double
Bigint aritmetik
[bigint] sayılarda aritmetik işlemler gerçekleştirdiğinizde PowerShell tüm işlenenleri [bigint]dönüştürür ve bu da tamsayı olmayan değerlerin kesilmesine neden olur. Örneğin, [double]1.9 değeri 1dönüştürüldüğünde [bigint] olarak kesilir.
PS> [bigint]1 / 1.9
1
PS> 1 / [bigint]1.9
1
Bu davranış, diğer sayısal türlerin davranışından farklıdır. Bu örnekte, [int] bölünen bir [double][double]ile sonuçlanmıştır.
1.9 bir [int] ataması, değeri 2kadar yuvarlar.
PS> 1 / 1.9
0.526315789473684
PS> 1 / [int]1.9
0.5
SAYıSAL OLMAYAN TÜRLERI EKLEME VE ÇARPMA
Sayı, dize, dizi ve karma tablo ekleyebilirsiniz. Ayrıca sayıları, dizeleri ve dizileri çarpabilirsiniz. Ancak karma tabloları çarpamazsınız.
Dizeler, diziler veya karma tablolar eklediğinizde, öğeler birleştirilir. Diziler veya karma tablolar gibi koleksiyonları birleştirirken, her iki koleksiyondaki nesneleri içeren yeni bir nesne oluşturulur. Aynı anahtara sahip karma tabloları birleştirmeye çalışırsanız işlem başarısız olur.
Örneğin, aşağıdaki komutlar iki dizi oluşturur ve bunları ekler:
$a = 1,2,3
$b = "A","B","C"
$a + $b
1
2
3
A
B
C
Ayrıca, farklı türlerdeki nesneler üzerinde aritmetik işlemler de gerçekleştirebilirsiniz. PowerShell'in gerçekleştirdiği işlem, işlemdeki en soldaki nesnenin Microsoft .NET türü tarafından belirlenir. PowerShell, işlemdeki tüm nesneleri ilk nesnenin .NET türüne dönüştürmeye çalışır. Nesneleri dönüştürmede başarılı olursa, ilk nesnenin .NET türüne uygun işlemi gerçekleştirir. Nesnelerden herhangi birini dönüştüremezse işlem başarısız olur.
Aşağıdaki örneklerde, farklı nesne türleri içeren işlemlerde toplama ve çarpma işleçlerinin kullanımı gösterilmektedir.
$array = 1,2,3
$red = [ConsoleColor]::Red
$blue = [ConsoleColor]::Blue
"file" + 16 # result = "file16"
$array + 16 # result = 1,2,3,16
$array + "file" # result = 1,2,3,"file"
$array * 2 # result = 1,2,3,1,2,3
"file" * 3 # result = "filefilefile"
$blue + 3 # result = Red
$red - 3 # result = Blue
$blue - $red # result = -3
+ '123' # result = 123
Deyimleri değerlendirmek için kullanılan yöntem en soldaki nesne tarafından belirlendiğinden, PowerShell'de toplama ve çarpma tam olarak değişmez. Örneğin, (a + b) her zaman (b + a)eşit değildir ve (ab) her zaman (ba)eşit değildir.
Aşağıdaki örneklerde bu ilke gösterilmektedir:
PS> "file" + 16
file16
PS> 16 + "file"
InvalidArgument: can't convert value "file" to type "System.Int32". Error:
"Input string wasn't in a correct format."
Karma tablolar biraz farklıdır. Eklenen karma tablolarda yinelenen anahtarlar olmadığı sürece başka bir karma tabloya karma tablolar ekleyebilirsiniz.
Aşağıdaki örnekte karma tabloların birbirine nasıl ekleneceği gösterilmektedir.
$hash1 = @{a=1; b=2; c=3}
$hash2 = @{c1="Server01"; c2="Server02"}
$hash1 + $hash2
Name Value
---- -----
c2 Server02
a 1
b 2
c1 Server01
c 3
Anahtarlardan biri her iki karma tabloda da çoğaltıldığı için aşağıdaki örnek bir hata oluşturur.
$hash1 = @{a=1; b=2; c=3}
$hash2 = @{c1="Server01"; c="Server02"}
$hash1 + $hash2
OperationStopped:
Line |
3 | $hash1 + $hash2
| ~~~~~~~~~~~~~~~
| Item has already been added. Key in dictionary: 'c' Key being added: 'c'
Ayrıca, bir diziye karma tablo ekleyebilirsiniz; ve karma tablosunun tamamı dizideki bir öğeye dönüşür.
$array1 = @(0, "Hello World", [datetime]::Now)
$hash1 = @{a=1; b=2}
$array2 = $array1 + $hash1
$array2
0
Hello World
Monday, June 12, 2017 3:05:46 PM
Key : a
Value : 1
Name : a
Key : b
Value : 2
Name : b
Ancak, karma tabloya başka bir tür ekleyemezsiniz.
$hash1 + 2
InvalidOperation: A hash table can only be added to another hash table.
Ekleme işleçleri çok yararlı olsa da, karma tablolara ve dizilere öğe eklemek için atama işleçlerini kullanın. Daha fazla bilgi için bkz. about_Assignment_Operators. Aşağıdaki örneklerde bir diziye öğe eklemek için += atama işleci kullanılır:
$array = @()
(0..2).ForEach{ $array += $_ }
$array
0
1
2
ARITMETIK IŞLEÇLER VE DEĞIŞKENLER
Değişkenlerle aritmetik işleçler de kullanabilirsiniz. İşleçler değişkenlerin değerlerine göre hareket eder. Aşağıdaki örneklerde değişkenlerle aritmetik işleçlerin kullanımı gösterilmektedir:
PS> $intA = 6
PS> $intB = 4
PS> $intA + $intB
10
PS> $a = "Power"
PS> $b = "Shell"
PS> $a + $b
PowerShell
ARITMETIK IŞLEÇLER VE KOMUTLAR
Genellikle sayı, dize ve dizi içeren ifadelerde aritmetik işleçleri kullanırsınız. Ancak, komutların döndüreceği nesnelerle ve bu nesnelerin özellikleriyle aritmetik işleçler de kullanabilirsiniz.
Aşağıdaki örneklerde, PowerShell komutları ile ifadelerde aritmetik işleçlerin nasıl kullanılacağı gösterilmektedir:
(Get-Date) + (New-TimeSpan -Day 1)
Parantez işleci, Get-Date cmdlet'in değerlendirilmesini ve New-TimeSpan -Day 1 cmdlet ifadesinin bu sırada değerlendirilmesini zorlar. Ardından her iki sonuç da + işleci kullanılarak eklenir.
Get-Process | Where-Object { ($_.WS * 2) -gt 50mb }
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
1896 39 50968 30620 264 1,572.55 1104 explorer
12802 78 188468 81032 753 3,676.39 5676 OUTLOOK
660 9 36168 26956 143 12.20 988 PowerShell
561 14 6592 28144 110 1,010.09 496 services
3476 80 34664 26092 234 ...45.69 876 svchost
967 30 58804 59496 416 930.97 2508 WINWORD
Yukarıdaki ifadede, her işlem çalışma alanı ($_.WS) 2ile çarpılır; ve sonuç, daha büyük olup olmadığını görmek için 50mb karşı karşılaştırın.
BIT DÜZEYINDE IŞLEÇLER
PowerShell, bit düzeyinde AND (-band), dahil ve özel bit tabanlı OR işleçleri (-bor ve -bxor) ve bit düzeyinde DEĞİl (-bnot) dahil olmak üzere standart bit düzeyinde işleçleri destekler.
PowerShell 2.0'da başlayarak, tüm bit düzeyinde işleçler 64 bit tamsayılarla çalışır.
PowerShell 3.0'dan başlayarak, PowerShell'de bit tabanlı aritmetiği desteklemek için -shr (shift-right) ve -shl (shift-left) kullanıma sunulmuştur.
PowerShell aşağıdaki bit düzeyinde işleçleri destekler.
| Operatör | Açıklama | İfade | Sonuç |
|---|---|---|---|
-band |
Bit Düzeyinde VE | 10 -band 3 |
2 |
-bor |
Bit Düzeyinde OR (dahil) | 10 -bor 3 |
11 |
-bxor |
Bit Düzeyinde OR (özel) | 10 -bxor 3 |
9 |
-bnot |
Bit Düzeyinde DEĞİl | -bnot 10 |
-11 |
-shl |
Shift-left | 102 -shl 2 |
408 |
-shr |
Sağa kaydırma | 102 -shr 1 |
51 |
Bit düzeyinde işleçler bir değerin ikili biçimine göre hareket eder. Örneğin, 10 sayısının bit yapısı 00001010 (1 bayt temelinde) ve 3 sayısının bit yapısı 00000011. Bit düzeyinde işleç kullanarak 10 ile 3 karşılaştırması yaptığınızda, her bayttaki tek tek bitler karşılaştırılır.
Bit düzeyinde AND işleminde, sonuçta elde edilen bit yalnızca her iki giriş biti de 1 olduğunda 1 olarak ayarlanır.
1010 (10)
0011 ( 3)
-------------- bAND
0010 ( 2)
Bit düzeyinde VEYA (dahil) bir işlemde, sonuçta elde edilen bit 1 olarak ayarlanır ve giriş bitlerinden biri veya her ikisi de 1 olur. Sonuçta elde edilen bit yalnızca her iki giriş biti de 0 olarak ayarlandığında 0 olarak ayarlanır.
1010 (10)
0011 ( 3)
-------------- bOR (inclusive)
1011 (11)
Bit düzeyinde VEYA (özel) bir işlemde, sonuçta elde edilen bit yalnızca bir giriş biti 1 olduğunda 1 olarak ayarlanır.
1010 (10)
0011 ( 3)
-------------- bXOR (exclusive)
1001 ( 9)
Bit düzeyinde NOT işleci, değerin ikili tamamlayıcısını üreten birli işleçtir. 1 biti 0, 0 biti ise 1 olarak ayarlanır.
Örneğin, 0 ikili tamamlayıcısı -1, en fazla işaretsiz tamsayı (0xFFFFFFFF) ve -1 ikili tamamlayıcısı 0'dır.
-bnot 10
-11
0000 0000 0000 1010 (10)
------------------------- bNOT
1111 1111 1111 0101 (-11, 0xFFFFFFF5)
Bit düzeyinde sola kaydırma işleminde, tüm bitler "n" yerler sola taşınır; burada "n" sağ işlenenin değeridir. Bir yere sıfır eklenir.
| İfade | Sonuç | İkili Sonuç |
|---|---|---|
21 -shl 0 |
21 | 0001 0101 |
21 -shl 1 |
42 | 0010 1010 |
21 -shl 2 |
84 | 0101 0100 |
Bit düzeyinde sağa kaydırma işleminde, tüm bitler "n" yerler sağa taşınır ve burada "n" doğru işlenen tarafından belirtilir. Shift-right işleci (-shr), imzalı bir değeri kaydırırken işaret bitini en soldaki yere kopyalar. İmzasız değerler için en soldaki konuma sıfır eklenir.
| İfade | Sonuç | İkili | Büyü |
|---|---|---|---|
21 -shr 0 |
21 | 00010101 | 0x15 |
21 -shr 1 |
10 | 00001010 | 0x0A |
21 -shr 2 |
5 | 00000101 | 0x05 |
21 -shr 31 |
0 | 00000000 | 0x00 |
21 -shr 32 |
21 | 00010101 | 0x15 |
21 -shr 64 |
21 | 00010101 | 0x15 |
21 -shr 65 |
10 | 00001010 | 0x0A |
21 -shr 66 |
5 | 00000101 | 0x05 |
[int]::MaxValue -shr 1 |
1073741823 | 00111111111111111111111111111111 | 0x3FFFFFFF |
[int]::MinValue -shr 1 |
-1073741824 | 11000000000000000000000000000000 | 0xC0000000 |
-1 -shr 1 |
-1 | 11111111111111111111111111111111 | 0xFFFFFFFF |
(-21 -shr 1) |
-11 | 11111111111111111111111111110101 | 0xFFFFFFF5 |
(-21 -shr 2) |
-6 | 11111111111111111111111111111010 | 0xFFFFFFF4 |
Ayrıca bakınız
PowerShell