SQL Server 邏輯位運算示例

2021-09-05 06:10:26 字數 2510 閱讀 7292

一、場景:

在某些場景中,需要儲存一系列的bit型。為了簡化資料庫結構或其它特殊的要求,可以將8個bit型儲存為1個byte中(例如,tinyint型)。

二、邏輯位運算函式:

(1)「邏輯位與」。當且僅當輸入表示式中兩個位(正在被解析的當前位)的值都為 1 時,結果中的位才被設定為 1;否則,結果中的位被設定為 0。

例如:select 170 & 75

1010 1010   <-- 170

0100 1011   <-- 75

-------------------

0000 1010   <-- 10

(2)「邏輯位或」。  如果在輸入表示式中有乙個位為 1 或兩個位均為 1(對於正在解析的當前位),那麼結果中的位將被設定為 1;如果輸入表示式中的兩個位都不為 1,則結果中的位將被設定為 0。

例如:select 170 | 75

1010 1010   <-- 170

0100 1011   <-- 75

-------------------

1110 1011   <-- 235

(3)「邏輯位異或」。 如果相對應的兩個位的值都為 0 或者都為 1,那麼結果中該位的值被清除為 0;否則(相對應的兩個位的值僅有1個為1),結果中該位的值被設定為 1。

例如:select 170 ^ 75

1010 1010   <-- 170

0100 1011   <-- 75

-------------------

1110 0001   <-- 225

三、讀取並判斷:

例如:if (170 & 8)=8,用於判斷右數第4位是否為1。即只需要對這個「位」執行「邏輯位與」運算,遮蔽掉其它7個位。

1010 1010   <-- 170

0000 1000   <-- 8

0000 1000   <-- 8

自定義函式:

create  function dbo.judgebit

( @combinedvalue tinyint, @bitposition tinyint)

returns bit

asbegin

return @combinedvalue & power(2,@bitposition-1)

end-- @combinedvalue 原始值(10進製),例如:170

-- @bitposition 第幾位,例如:4

-- 返回值為0或1

四、賦值:

(1) 將某位設為1

只需要對這個「位」執行「邏輯位或」運算,即 select x | 8

例如:1010 1010   <-- 170

0000 0100   <-- 4

-------------------

1010 1110   <-- 174

(2) 將某位設為0。

先判斷這個位是否已經為0;如果當前為1,則需要對這個「位」執行「邏輯位異或」運算,即 if (x & 8)=8 select x ^ 8

例如:1010 1010   <-- 170

0000 1000   <-- 8

1010 0010   <-- 162

自定義函式:

create function setbitvalue

( @combinedvalue tinyint, @bitposition tinyint, @bitvalue bit)

returns tinyint

asbegin

declare @returnvalue tinyint

if @bitvalue=1

begin

select @returnvalue=@combinedvalue | power(2,@bitposition-1)

endelse

begin

if @combinedvalue & power(2,@bitposition-1)=@bitvalue

select @returnvalue=@combinedvalue

else

select @returnvalue=@combinedvalue ^ power(2,@bitposition-1)

end 

return @returnvalue

end -- @combinedvalue 原始值(10進製),例如:170

-- @bitposition 第幾位,例如:4

-- @bitvalue 賦值,只能為0或1

-- 返回值(10進製),例如:170

sql server 2008 提供了類似c語言的賦值函式,例如「&=」(位與等於)、「|=」(位於等於)、「^=」(位異或等於)。

SQL Server 邏輯位運算示例

一 場景 在某些場景中,需要儲存一系列的bit型。為了簡化資料庫結構或其它特殊的要求,可以將8個bit型儲存為1個byte中 例如,tinyint型 二 邏輯位運算函式 1 邏輯位與 當且僅當輸入表示式中兩個位 正在被解析的當前位 的值都為 1 時,結果中的位才被設定為 1 否則,結果中的位被設定為...

邏輯位運算與邏輯運算

兩者非常容易混淆,其實這是截然不同的兩種運算.1.邏輯位運算 與運算 1 2 0 0000 0001 0000 0010 0000 0000 0 或運算 1 2 3 0000 0001 0000 0010 0000 0011 3 按位求反 運算,異或 運算略.移位 左移,右移 運算略.2.邏輯運算 ...

邏輯運算 位運算

今天有人問我,邏輯運算是什麼,現在來解釋一下 邏輯運算就是相當於資訊競賽基礎工具中的一位的位運算 符號對應關係 wedge cap 交 and 與運算 vee cup 並 or 或運算 neg not 非 xor 異或運算 x k 將x的二進位制右移k位 如 x 10110 2 時,k 1,那麼x ...