將數字轉換為二進制 2 的補碼-
我在 oracle 表的列中有一個樣本號 - 1647795600
我想將其轉換為二進制 2 的恭維。
預期輸出-01100010001101110101110110010000
參考鏈接 - https://www.rapidtables.com/convert/number/decimal-to-binary.html
uj5u.com熱心網友回復:
您可以創建函式:
CREATE FUNCTION dec_to_2c_bin(
value IN PLS_INTEGER,
width IN PLS_INTEGER := 32
) RETURN VARCHAR2 DETERMINISTIC
IS
v_unsigned PLS_INTEGER;
v_binary VARCHAR2(201);
BEGIN
IF value < 0 THEN
v_unsigned := -1 - value;
ELSE
v_unsigned := value;
END IF;
WHILE ( v_unsigned > 0 ) LOOP
v_binary := MOD(v_unsigned, 2) || v_binary;
v_unsigned := TRUNC( v_unsigned / 2 );
END LOOP;
IF LENGTH(v_binary) > width - 1 THEN
RAISE_APPLICATION_ERROR(-20000, 'The value is too large.');
END IF;
v_binary := LPAD(v_binary, width, '0');
IF value < 0 THEN
RETURN TRANSLATE(v_binary, '01', '10');
ELSE
RETURN v_binary;
END IF;
END;
/
然后對于樣本資料:
CREATE TABLE table_name (value) AS
SELECT 1647795600 FROM DUAL UNION ALL
SELECT -1647795600 FROM DUAL UNION ALL
SELECT 25143 FROM DUAL UNION ALL
SELECT 3142 FROM DUAL UNION ALL
SELECT -3142 FROM DUAL;
查詢:
SELECT value, dec_to_2c_bin(value, 64) AS binary2c
FROM table_name;
輸出:
| 價值 | 二進制2C |
|---|---|
| 1647795600 | 00000000000000000000000000000000001100010001101110101110110010000 |
| -1647795600 | 1111111111111111111111111111111110011101110010001010001001110000 |
| 25143 | 00000000000000000000000000000000000000000000000000110001000110111 |
| 3142 | 000000000000000000000000000000000000000000000000000000110001000110 |
| -3142 | 111111111111111111111111111111111111111111111111111001110111010 |
db<>在這里擺弄
uj5u.com熱心網友回復:
我發現一個陳述句對測驗的樣本數很好 - select reverse(max(replace(sys_connect_by_path(mod(trunc(&N/power(2,level-1)),2),' '),' ','') )) bin from dual connect by level <= 32 ;
但可能并不完全有用,需要修改才能從表中讀取。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/466337.html
