位运算的各种神奇操作与编程中常用技巧实践(结合Doris源码深入分析)

背景

阅读包括JDK、Apache Doris源码中发现了大量位运算操作的身影,查阅了各种资料之后写成此文。

闲话少叙,开始吧~

参考文章

先看这两篇参考文章:
1、https://www.runoob.com/w3cnote/bit-operation.html
2、(链接在下)

aHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL3MvOTlIVmlqWW1iazFCckdWaTFCcXJDZw==

我用了base64加密了原文链接,因为原文链接包含微信的域名,直接发出来的话文章会被和谐,所以出此下策......所以想看原文直接搜base64解密,把上面这段密文黏贴进去即可得到URL。

工业实践

我们可以看到Doris的bitmap_function.cpp文件里的这段示例代码:

//......
static uint32_t highBytes(const uint64_t in) { return uint32_t(in >> 32); }
static uint32_t lowBytes(const uint64_t in) { return uint32_t(in); }
static uint64_t uniteBytes(const uint32_t highBytes, const uint32_t lowBytes) {
        return (uint64_t(highBytes) << 32) | uint64_t(lowBytes);
//......

可以看到,在上面的 uint64_t uniteBytes(const uint32_t highBytes, const uint32_t lowBytes) 函数中,利用了参考文章2所提到的用位运算拼接了两个32位无符号的数,其中高位是通过将高位的数左移32位实现的,低位保持不变就可以,然后再用按位或运算操作符将两个数拼接起来。
注意:这里uint32_t highBytes(const uint64_t in) { return uint32_t(in >> 32); }先右移32位的原因:(未完待续。。。。。。)

你可能感兴趣的:(位运算的各种神奇操作与编程中常用技巧实践(结合Doris源码深入分析))