mysql 10进制转2进制_Oracle 10进制转换2进制
写了个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进制相关推荐
- shell 中转换16进制10进制
2012年10月10日 17:28:55 帝都码农 阅读数 12150 标签: shell 更多 个人分类: shell 一.16进制转换成10进制 printf %d 0xF 15 或者 echo ...
- 使用 Shell 运算进行进制转换 16进制转10进制
使用 Shell 运算进行进制转换 工作时候常常遇到一些问题,拿到的数字是16进制的,但是运算的时候是10进制的,shell可以很方便的处理这类的进制转换问题,一种情况是使用 Shell 运算把一个数 ...
- linux c int16进制转10进制,[编程题] 进制转换(16进制转10进制)
[编程题] 进制转换 3/3 [编程题] 进制转换 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 写出一个程序,接受一个十六进制的数,输出该数值的十进制表示. ...
- 关于signed char类型的16进制数据转成带符号的10进制问题
文章目录 前言 signed char类型的16进制数据如何转成带符号的10进制数? 总结 前言 在最近的学习中,遇到了一个疑惑,三组16进制的数据分别为0xFF,0xF3,0x2A;这三组16进制的 ...
- 字符编码转换_进制转换(GB2312,GBK,JNI,HexTOStr)
[cpp] view plain copy print? // /* ASCII 英文一个字节 gb2312,gbk 中文两个字节,英文一个字节 在中文系统中ansi一般指gb2312或gbk GB2 ...
- Bailian2972 确定进制(POJ NOI0113-34,POJ NOI0201-1973)【暴力+进制】
问题链接:POJ NOI0113-34 确定进制. 问题链接:POJ NOI0201-1973 确定进制. 确定进制 描述 6*9 = 42 对于十进制来说是错误的,但是对于13进制来说是正确的.即, ...
- 进制转换——36进制
题目:进制转换类 题目描述 将M进制的数X转换为N进制的数输出. 输入 第一行,一个整数T,代表测试数据组数. 接着T行,输入32位二进制数 输出 输出X的N进制表示的数. 测试样例 输入 10 2 ...
- 进制转换与进制转换表达式
常见的进制分为二进制,八进制,十进制,十六进制 生活中最常见的就是十进制,也就是平时看见的数字,例如数值100的二进制表达式就是为100 用二进制则表达为01100100 用八进制则表达为144 用十 ...
- 【进制转换】负进制转换 多进制转换
1.负进制转换 洛谷P1017 进制转换 负进制的转换和正进制的转换雷同,都是用短除取余法,这里要保证余数都要是正数才行: 要想让本来余数是负数变为正数,其实很好操作,就直接让商+1,余数-(相应的进 ...
- 基于单片机(AT89C51)的进制转换及进制计算器
基于单片机(AT89C51)的进制转换及进制计算器 闲来无事,用手头51单片机做个进制计算器 成品功能:能实现十进制带负数.带小数点的加减乘除,不同进制之间的转换,同一进制之间的加减乘. 材料 AT8 ...
最新文章
- c#语言编写汉诺塔游戏,c#实现汉诺塔问题示例
- java程序a-z_用Java写一个程序:使其输出从A-Z的排序字母
- 基于句子嵌入的无监督文本摘要(附代码实现)
- 转:sqlserver2005安装时提示“无法找到产品SQLXml4的安装包。
- linux添加zip扩展
- 股神巴菲特揭示致富的十大秘籍[转]
- NIO 02 (转)
- 一段和别人的对话,没事写出来(杂项)
- Spring源码之创建AOP代理
- python学习第七天--文件系统常用模块os,os.path,pickle
- [Oracle]ORA-600[kdBlkCheckError]LOB坏块处理
- 视频教程-IP地址划分(CCNA魔鬼训练营系列)-思科认证
- word2007导出pdf带书签
- c语言中实型变量的三种类型,在C语言中的实型变量分为两种类型..doc
- 增强现实(AR)智能眼镜的关键技术:标定、跟踪与交互
- 编程,初来乍到,多多关照。
- 厨神之路五--粥汤类
- dnf命令 (常用总结)
- Python每日一编程小练习(2019.06.10)——赛场统分
- 四六级备考 01 两会
热门文章
- spring bean加载过程_Spring源码剖析3:Spring IOC容器的加载过程
- 2020-12-15 IEEE写作格式
- 二进制、字节、int范围、编码
- mac PHP集成开发工具(PhpStorm)
- nowcoder20C 位数差
- Pycharm 创建 Django admin 用户名和密码
- zepto不支持animate({scrollTop:100px})的解决办法
- lua--面向对象使用middleclass
- [项目管理]团队管理中的起点:尊重
- 在FCKeditor 2.6中添加插入视频和音频功能(最新修订版)