3

如何使用TSQL進行按位操作。使用類似於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類型。 Like 0001 0000代表16.

+0

* *所以你想旋轉位? –

+1

你爲什麼不乘以2? a = a * 2; –

+0

是@LukasEder .. –

回答

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 

Examples at SQL Fiddle.

+0

謝謝噸... –