uint与int互转
Int与Uint的区别在于带符号与不带符号,在计算机中根据补码进行互相转换,很多语言是有方法支持的,但是也有一些并没有转换方法,比如SQLserver(SQLserver不支持Uint类型),下面这个方法理论上可以运用于任何语言进行转换。
SQLserver中并不存在uint,所以我们用bigint格式来接收转换后的数据
int→uint
如果为正数:数据(正数不变)
如果为负数:MaxInt-MinInt-(|数据|)+1 = 2147483647-(-2147483648)+(数据)+1 = 4294967296+(数据)
SQL代码:
DECLARE @int INT =-1
SELECT CASE WHEN @int>=0 THEN @int ELSE 4294967296+@int END
JS代码:
function int2uint(i) {
if (i >= 0)
return i;
else
4294967296 + i;
}
uint→int
如果小于等于MaxInt:数据(不变)
如果大于MaxInt:(数据)-MaxInt+MinInt-1=(数据)-2147483647+(-2147483648)-1=(数据)-4294967296
SQL代码:
DECLARE @uint BIGINT=4294967295
SELECT CASE WHEN @uint<=2147483647 THEN @uint ELSE @uint-4294967296 End
JS代码:
function uint2int(i) {
if (i <= 2147483647)
return i;
else
return i - 4294967296
}