取以下代码:
Declare @a integer
set @a = 0
set @a = @a | cast (1 as BINARy)
set @a = @a | cast (100 as BINARy)
select cast (@a as integer)
Run Code Online (Sandbox Code Playgroud)
现在,这段代码的输出不应该是 5 吗?
我有一个整数,将它设置为 0,所以在二进制中它全是 0
然后我OR用 1 ,所以它变成 0..001
然后我OR用 100 二进制,所以它应该变成 00..0101,十进制是 5
我实际得到的输出是 101
编辑:为了更清楚,我试图用 TSQL 完成以下代码在 C++ 中的作用
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
int a;
a = 0;
a = a | 1;
cout<< a;
a = a | 0b100;
cout<<endl<<a;
}
Run Code Online (Sandbox Code Playgroud)
你的演员没有做你认为应该做的事。
select cast(cast(100 as binary) as int)等于 100。换句话说,您将十进制值 100 转换为二进制值,而不是采用基数为 2 的表示法中的“100”。
你的期望实际上是这样的:
Declare @a integer
set @a = 0
set @a = @a | cast (1 as BINARY)
set @a = @a | cast (5 as BINARY)
select cast (@a as integer)
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果这是新开发,我强烈建议不要在 SQL Server 中进行位移。它很慢,难以维护,并且违反了第一范式。如果不是,我猜你可能已经知道了……
要将二进制转换为十进制,您可以创建一个函数。还有其他方法可以从 integer 到 display base-2 notation,但这感觉会很慢。
| 归档时间: |
|
| 查看次数: |
1012 次 |
| 最近记录: |