2014-08-29 71 views
1
Select Cast(656878503183 as bigint) & Cast(8 as bigint) 

Result 
8 

有人可以幫助我解決這個問題。結果如何達到8?我有點迷失在這。Tsql AND(&)confusion

最後的656878503183位可以是3

0011 AND 
1000 
----- 
0000 

是0

+1

請注意,在T-SQL中'AND'和'&'不是等價的運算符。 '&'是[位運算符](http://msdn.microsoft.com/en-us/library/ms176122.aspx),AND是[邏輯運算符](http://msdn.microsoft .COM/EN-US /庫/ ms189773.aspx)。 – Josien 2014-08-29 13:03:42

+0

當基本的東西是「錯誤的」時,假定你犯了一個錯誤,而不是假設語言/工具/等是行爲不當。回去並三重檢查你的所有計算和假設。 – MatBailie 2017-12-13 18:43:59

回答

5

在二進制中,較大的值表示爲1001100011110001000000101000010100001111,並且如果注意到8 1000中,從第4位兩者的權利都是1。因此,bitwise and操作僅針對該位評估爲1,而對於其他評估則爲0。因此應用bitwise and到2號的結果將結束0000 .... 1000這又是8

1001100011110001000000101000010100001111 
0000000000000000000000000000000000001000 
---------------------------------------- 
0000000000000000000000000000000000001000 

注:我用this工具來執行轉換,實際上並沒有評估的事情我自己,所以我建議你仔細檢查轉換是否正確。

+1

用於顯示整個數字寬度的AND運算的額外功能。 – dcorking 2014-08-29 13:01:14

+0

你爲什麼不自己做轉換!!!順便說一下,Windows計算器會做轉換就好了。 – 2014-08-29 13:02:54

+0

不要擔心@ shree.pat18的轉換。我剛剛用Ruby做了它,並且與他使用TSQL的結果非常一致。讓我們刪除TSQL標籤,因爲您的問題適用於任何語言。 – dcorking 2014-08-29 13:04:24