写了个Oracle转换函数,发现当数据为负数的时候,无法转换,因为业务前端入库的数据是32位,当JAVA进行有符号转换为INT类型的时候

写了个Oracle转换函数,发现当数据为负数的时候,无法转换,,因为业务前端入库的数据是32位,当JAVA进行有符号转换为INT类型的时候,会产生负数,而我要再次转换为二进制进行位的判断,网上找了好多,都不能做有符号数字的转换,因此按照负数的二进制表示法重新写了个函数:

负数的二进制方法的表示方法:例如 -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);

--如果为正数

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('正数结果'||V_RTN);

--补全32位高位0

SELECT lpad(V_RTN,32,0)

INTO V_RTN

FROM dual;

--dbms_output.put_line('正数补全结果'||V_RTN);

ELSE

--转换为二进制同时按位取反

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('负数结果'||V_RTN);

--补全32位高位1

SELECT lpad(V_RTN,32,1)

INTO V_RTN

FROM dual;

--dbms_output.put_line('负数补全1结果'||V_RTN);

--二进制转换为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('转换为十进制数结果'||V_RTN);

----转换为二进制

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('负数转换结果'||V_RTN);

--补全32位高位0

SELECT lpad(V_RTN,32,0)

INTO V_RTN

FROM dual;

--dbms_output.put_line('负数补全0结果'||V_RTN);

END IF;

RETURN V_RTN;

END;

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

mysql 10进制转2进制_Oracle 10进制转换2进制相关推荐

  1. shell 中转换16进制10进制

    2012年10月10日 17:28:55 帝都码农 阅读数 12150 标签: shell 更多 个人分类: shell 一.16进制转换成10进制 printf %d 0xF 15 或者 echo ...

  2. 使用 Shell 运算进行进制转换 16进制转10进制

    使用 Shell 运算进行进制转换 工作时候常常遇到一些问题,拿到的数字是16进制的,但是运算的时候是10进制的,shell可以很方便的处理这类的进制转换问题,一种情况是使用 Shell 运算把一个数 ...

  3. linux c int16进制转10进制,[编程题] 进制转换(16进制转10进制)

    [编程题] 进制转换 3/3 [编程题] 进制转换 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 写出一个程序,接受一个十六进制的数,输出该数值的十进制表示. ...

  4. 关于signed char类型的16进制数据转成带符号的10进制问题

    文章目录 前言 signed char类型的16进制数据如何转成带符号的10进制数? 总结 前言 在最近的学习中,遇到了一个疑惑,三组16进制的数据分别为0xFF,0xF3,0x2A;这三组16进制的 ...

  5. 字符编码转换_进制转换(GB2312,GBK,JNI,HexTOStr)

    [cpp] view plain copy print? // /* ASCII 英文一个字节 gb2312,gbk 中文两个字节,英文一个字节 在中文系统中ansi一般指gb2312或gbk GB2 ...

  6. Bailian2972 确定进制(POJ NOI0113-34,POJ NOI0201-1973)【暴力+进制】

    问题链接:POJ NOI0113-34 确定进制. 问题链接:POJ NOI0201-1973 确定进制. 确定进制 描述 6*9 = 42 对于十进制来说是错误的,但是对于13进制来说是正确的.即, ...

  7. 进制转换——36进制

    题目:进制转换类 题目描述 将M进制的数X转换为N进制的数输出. 输入 第一行,一个整数T,代表测试数据组数. 接着T行,输入32位二进制数 输出 输出X的N进制表示的数. 测试样例 输入 10 2 ...

  8. 进制转换与进制转换表达式

    常见的进制分为二进制,八进制,十进制,十六进制 生活中最常见的就是十进制,也就是平时看见的数字,例如数值100的二进制表达式就是为100 用二进制则表达为01100100 用八进制则表达为144 用十 ...

  9. 【进制转换】负进制转换 多进制转换

    1.负进制转换 洛谷P1017 进制转换 负进制的转换和正进制的转换雷同,都是用短除取余法,这里要保证余数都要是正数才行: 要想让本来余数是负数变为正数,其实很好操作,就直接让商+1,余数-(相应的进 ...

  10. 基于单片机(AT89C51)的进制转换及进制计算器

    基于单片机(AT89C51)的进制转换及进制计算器 闲来无事,用手头51单片机做个进制计算器 成品功能:能实现十进制带负数.带小数点的加减乘除,不同进制之间的转换,同一进制之间的加减乘. 材料 AT8 ...

最新文章

  1. c#语言编写汉诺塔游戏,c#实现汉诺塔问题示例
  2. java程序a-z_用Java写一个程序:使其输出从A-Z的排序字母
  3. 基于句子嵌入的无监督文本摘要(附代码实现)
  4. 转:sqlserver2005安装时提示“无法找到产品SQLXml4的安装包。
  5. linux添加zip扩展
  6. 股神巴菲特揭示致富的十大秘籍[转]
  7. NIO 02 (转)
  8. 一段和别人的对话,没事写出来(杂项)
  9. Spring源码之创建AOP代理
  10. python学习第七天--文件系统常用模块os,os.path,pickle
  11. [Oracle]ORA-600[kdBlkCheckError]LOB坏块处理
  12. 视频教程-IP地址划分(CCNA魔鬼训练营系列)-思科认证
  13. word2007导出pdf带书签
  14. c语言中实型变量的三种类型,在C语言中的实型变量分为两种类型..doc
  15. 增强现实(AR)智能眼镜的关键技术:标定、跟踪与交互
  16. 编程,初来乍到,多多关照。
  17. 厨神之路五--粥汤类
  18. dnf命令 (常用总结)
  19. Python每日一编程小练习(2019.06.10)——赛场统分
  20. 四六级备考 01 两会

热门文章

  1. spring bean加载过程_Spring源码剖析3:Spring IOC容器的加载过程
  2. 2020-12-15 IEEE写作格式
  3. 二进制、字节、int范围、编码
  4. mac PHP集成开发工具(PhpStorm)
  5. nowcoder20C 位数差
  6. Pycharm 创建 Django admin 用户名和密码
  7. zepto不支持animate({scrollTop:100px})的解决办法
  8. lua--面向对象使用middleclass
  9. [项目管理]团队管理中的起点:尊重
  10. 在FCKeditor 2.6中添加插入视频和音频功能(最新修订版)