如何使用TSQL进行按位操作。
我想将1位向左移位。最左边的位也应该变成极右位。
Eg1:
Declare @a tinyint = 15
--Which is equal to 0000 1111
I need the result to be 30
--Which is equal to 0001 1110
Eg2:
Declare @a tinyint = 16
--Which is equal to 0001 0000
I need the result to be 32
--Which is equal to 0010 0000
或选择性地反转一点。例如,这里反转第3位位置
input: 0011 0010
result: 0011 1010
为了便于理解,我以二进制显示输入,实际上输入必须是int类型。像0001 0000代表16。
答案 0 :(得分:5)
您可以使用^
(exclusive or)翻转一下。例如:
set @input = 15
set @bit = 4
set @result = @input ^ power(2, @bit - 1)
在二进制系统中,乘以2将所有位向左移一位。因此,您可以通过移位实现1位旋转,然后手动将最高位移到最后位:
set @input = 128
set @result =
case
when @input & 128 > 0 then (@input ^ 128) * 2 + 1
else @input * 2
end