博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在oracle实践学习位运算 第一篇
阅读量:2449 次
发布时间:2019-05-10

本文共 2277 字,大约阅读时间需要 7 分钟。

今天无意中看到了谭浩强先生的<>这本书,虽然c语言都是很多年前学过的东西了,但是看起来亲切,实际用起来陌生,很多的概念都已经很模糊了,记得上大学时老师特别推荐的位运算这一部分,自己这次又看了下,还是有一定的收获。
位运算非常的简洁,使用起来看起来很高深,很有专业的味道,经常在一些笔试面试题中出现一些位运算的身影。而且个人觉得位运算确实是比较通用和精华的内容。
位运算是二进制位的运算,c语言提供了位运算的功能,在其它的高级语言(java)中也有实现,还是具有一定的优势的。
c语言中提供的位运算符有
按位与 &   按位或  |   按位异或 ^   
取反   ~     左移 <<    右移   >>
这6种运算符中,除了取反~运算符外,其它的都是二目运算符,就是要求运算符两侧各有一个运算量,运算量是整型或者字符型的数据
先来看看按位与,基本的运算规则就是 0&0=0 ,0&1=0 ,1&0=0,1&1=1 因为是二进制的运算,我们转换成二进制的方式来看就比较清楚了。
以3&5为例。
00000011
00000101   &
---------------
00000001
所以3&5按位与的结果就是1,
明白了这些基本内容,我们如果通过c语言,或者java来简单测试是没有问题的,我手头有oracle的环境,那就用oracle来试试。
oracle中对于按位与是通过bitand来实现的。通过字面理解也很容易区别。
SQL> select bitand(3,5) from dual;
BITAND(3,5)
-----------
          1
按位或
按位或的基本运算规则就是   0|0=0, 0|1=1,1|0=1,1|1=1
还是上面相似的例子3|5
00000011
00000101   |
---------------
00000111
所以按位或的结果就是7
当然了在oracle中可没有直接的函数bitor
但是我们可以通过bitand来得到bitor的结果。
基本的公式就是bitor(x,y)=x+y-bitand(x,y)
所以bitor(3,5)=3+5-bitand(3,5)=8-1=7
按位异或
按位异或有时候也叫XOR运算符,它的运算规则是 0^0=0, 0^1=1, 1^0=1, 1^1=0
还是类似的例子。
3^5
00000011
00000101   ^
---------------
00000110
所以按位异或的结果就是6
在oracle中也没有按位异或的函数bitxor,但是可以通过bitand来实现。
bitxor(x,y)=bitor
(x,y) - bitand(x,y) = (x + y) - BITAND(x, y) * 2
所以bitxor(3,5)=3+5-2*1=6
说到这三种运算符,在oracle中也有它们的身影。
可以在utl_raw中得到,但是不同之处在于类型是raw,需要数据进制的转换。
SQL> desc  utl_raw
FUNCTION BIT_AND RETURNS RAW
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 R1                             RAW                     IN
 R2                             RAW                     IN
FUNCTION BIT_COMPLEMENT RETURNS RAW
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 R                              RAW                     IN
FUNCTION BIT_OR RETURNS RAW
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 R1                             RAW                     IN
 R2                             RAW                     IN
FUNCTION BIT_XOR RETURNS RAW
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 R1                             RAW                     IN
 R2                             RAW                     IN
举一个例子,还是以3 和 5 为运算量,这个时候需要用到hextoraw这个函数,这个函数是十六进制转换的函数。
所以hextoraw(3)实际是

十六进制:3

十进制:3(3)

二进制:00011

同理,hextoraw(5)的二进制为101
使用utl_raw得到的情况就是

select utl_raw.bit_and(hextoraw(3),hextoraw(5)) from dual

结果类似于使用bitand的结果  select bitand(3,5) from dual
二进制的运算都是有一定的实际使用意义的,在后续的博文中继续分享,欢迎关注。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23718752/viewspace-1440273/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23718752/viewspace-1440273/

你可能感兴趣的文章
邪恶的AJAX:使用jQuery的Spyjax
查看>>
css指针悬停_CSS指针事件
查看>>
目标检测 多分辨率检测_检测视频分辨率
查看>>
ip校验和 tcp校验和_如何校验和
查看>>
Firefox Marketplace动画按钮
查看>>
object.freeze_Object.freeze:不可变对象
查看>>
css文本显示_CSS技巧— CSS和文本选择与突出显示
查看>>
移动端 调试按钮 meta_使用META标签覆盖Vista和XP的主题按钮和滚动条
查看>>
css实现联动菜单隐藏功能_使用CSS的隐藏辅助功能消息
查看>>
无精打采的导航–使用CSS事半功倍
查看>>
ftp文件夹错误 参数错误_收藏夹和404错误
查看>>
css 背景闪烁_防止IE6 CSS背景闪烁
查看>>
css鼠标指针光标样式_高级CSS光标–通过指针提高可用性
查看>>
桌面图标每个上都带个空白页_创建带有数据的空白图标
查看>>
怎么优化优化css动画_使用CSS优化网站内容以进行打印
查看>>
css链接到另一个css_高级CSS链接–增强您的链接
查看>>
css高级颜色_高级CSS表–使用CSS3替代行颜色
查看>>
怎么优化优化css动画_使用CSS优化网站结构以进行打印
查看>>
css–sprit_高级CSS –类已用完–通过使用结构化格式标签避免类
查看>>
git撤销文件修改_使用Git撤消文件更改
查看>>