mysql 10进制转2进制_Oracle 10进制转换2进制
寫了個Oracle轉(zhuǎn)換函數(shù),發(fā)現(xiàn)當數(shù)據(jù)為負數(shù)的時候,無法轉(zhuǎn)換,因為業(yè)務(wù)前端入庫的數(shù)據(jù)是32位,當JAVA進行有符號轉(zhuǎn)換為INT類型的時候
寫了個Oracle轉(zhuǎn)換函數(shù),發(fā)現(xiàn)當數(shù)據(jù)為負數(shù)的時候,無法轉(zhuǎn)換,,因為業(yè)務(wù)前端入庫的數(shù)據(jù)是32位,當JAVA進行有符號轉(zhuǎn)換為INT類型的時候,會產(chǎn)生負數(shù),而我要再次轉(zhuǎn)換為二進制進行位的判斷,網(wǎng)上找了好多,都不能做有符號數(shù)字的轉(zhuǎn)換,因此按照負數(shù)的二進制表示法重新寫了個函數(shù):
負數(shù)的二進制方法的表示方法:例如 -5
第一步:首先要把5變成101的二進制形式
第二步:再者就是安位取反,(形成前面全是1)010
第三步:在最后加1 形成:11111111 11111111 11111111 11111011
CREATE OR REPLACE FUNCTION NUMBER_2_BIT(V_NUM NUMBER) RETURN VARCHAR IS
V_RTN VARCHAR(2000);
V_N1 NUMBER;
V_N2 NUMBER;
BEGIN
V_N1 := ABS(V_NUM);
--如果為正數(shù)
IF SIGN(V_NUM) > 0 THEN
LOOP
V_N2 := MOD(V_N1, 2);
V_N1 := ABS(TRUNC(V_N1 / 2));
V_RTN := TO_CHAR(V_N2) || V_RTN;
EXIT WHEN V_N1 = 0;
END LOOP;
--dbms_output.put_line('正數(shù)結(jié)果'||V_RTN);
--補全32位高位0
SELECT lpad(V_RTN,32,0)
INTO V_RTN
FROM dual;
--dbms_output.put_line('正數(shù)補全結(jié)果'||V_RTN);
ELSE
--轉(zhuǎn)換為二進制同時按位取反
LOOP
V_N2 := MOD(V_N1, 2);
IF V_N2 = 1 THEN
V_N2 := 0;
ELSIF V_N2 = 0 THEN
V_N2 := 1;
END IF;
V_N1 := ABS(TRUNC(V_N1 / 2));
V_RTN := TO_CHAR(V_N2) || V_RTN;
EXIT WHEN V_N1 = 0;
END LOOP;
--dbms_output.put_line('負數(shù)結(jié)果'||V_RTN);
--補全32位高位1
SELECT lpad(V_RTN,32,1)
INTO V_RTN
FROM dual;
--dbms_output.put_line('負數(shù)補全1結(jié)果'||V_RTN);
--二進制轉(zhuǎn)換為10機制,同時+1
SELECT SUM(data1) + 1
INTO V_N1
FROM (SELECT substr(V_RTN, rownum, 1) * power(2, length(V_RTN) - rownum) data1
FROM dual
CONNECT BY rownum <= length(V_RTN));
-- dbms_output.put_line('轉(zhuǎn)換為十進制數(shù)結(jié)果'||V_RTN);
----轉(zhuǎn)換為二進制
LOOP
V_N2 := MOD(V_N1, 2);
V_N1 := ABS(TRUNC(V_N1 / 2));
V_RTN := TO_CHAR(V_N2) || V_RTN;
EXIT WHEN V_N1 = 0;
END LOOP;
--dbms_output.put_line('負數(shù)轉(zhuǎn)換結(jié)果'||V_RTN);
--補全32位高位0
SELECT lpad(V_RTN,32,0)
INTO V_RTN
FROM dual;
--dbms_output.put_line('負數(shù)補全0結(jié)果'||V_RTN);
END IF;
RETURN V_RTN;
END;
本文原創(chuàng)發(fā)布php中文網(wǎng),轉(zhuǎn)載請注明出處,感謝您的尊重!
總結(jié)
以上是生活随笔為你收集整理的mysql 10进制转2进制_Oracle 10进制转换2进制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于页面配色
- 下一篇: debian mysql开机启动_自动启