# encoding: ascii
# api: powershell
# title: Shift Operators(Correct)
# description: Sorry, new to poshcode, I found Joels’ blog and wanted to point out that shifting by 0 bits is not supported by the function, its the pipelin logic handlign at fault really.
# version: 0.1
# type: class
# author: Joel Bennett
# license: CC0
# function: Shift-Left
# x-poshcode-id: 3453
# x-archived: 2012-06-18T09:49:24
# x-published: 2012-06-12T21:44:00
#
# The missing Shift operators corrected so they shift in the right direction.
# Note that for v1 you need to change Add-Type to New-Type
# Shift-Left 16 1 returns 32
# Shift-Right 8 1 returns 4
# 8,16 |Shift-Left returns 16,32
# 2,4,8 |Shift-Right 2 returns 0,1,2
#
#requires -version 2.0
Add-Type @"
public class Shift {
public static int Right(int x, int count) { return x >> count; }
public static uint Right(uint x, int count) { return x >> count; }
public static long Right(long x, int count) { return x >> count; }
public static ulong Right(ulong x, int count) { return x >> count; }
public static int Left(int x, int count) { return x << count; }
public static uint Left(uint x, int count) { return x << count; }
public static long Left(long x, int count) { return x << count; }
public static ulong Left(ulong x, int count) { return x << count; }
}
"@
#.Example
# Shift-Left 16 1 ## returns 32
#.Example
# 8,16 |Shift-Left ## returns 16,32
function Shift-Left {
PARAM( $x=1, $y )
BEGIN {
if($y) {
[Shift]::Left( $x, $y )
}
}
PROCESS {
if($_){
[Shift]::Left($_, $x)
}
}
}
#.Example
# Shift-Right 8 1 ## returns 4
#.Example
# 2,4,8 |Shift-Right 2 ## returns 0,1,2
function Shift-Right {
PARAM( $x=1, $y )
BEGIN {
if($y) {
[Shift]::Right( $x, $y )
}
}
PROCESS {
if($_){
[Shift]::Right($_, $x)
}
}
}