【转】C语言的位运算的优势

位运算加速技巧
1. 如果乘上一个2的倍数数值,可以改用左移运算(Left Shift) 加速 300%

x = x * 2;
x = x * 64;
//改为:
x = x << 1; // 2 = 21
x = x << 6; // 64 = 26

2. 如果除上一个 2 的倍数数值,可以改用右移运算加速 350%

x = x / 2;
x = x / 64;
//改为:

x = x >> 1;// 2 = 21
x = x >> 6;// 64 = 26

3. 数值转整数加速 10%

x = int(1.232)
//改为:

x = 1.232 >> 0;

4. 交换两个数值(swap),使用 XOR 可以加速20%

var t:int = a;
a = b;
b = t;
//equals:
a = a^b;
b = a^b;
a = a^b;

5. 正负号转换,可以加入 300%

i = -i;
//改为
i = ~i + 1; // NOT 写法
//或
i = (i ^ -1) + 1; // XOR 写法


6. 取余数,如果除数为 2 的倍数,可利用 AND 运算加速 600%

x = 131 % 4;
//equals:
x = 131 & (4 - 1);

7. 利用 AND 运算检查整数是否为 2 的倍数,可以加速 600%

isEven = (i % 2) == 0;
//equals:
isEven = (i & 1) == 0;

8. 加速 Math.abs 600% 的写法1,写法2 又比写法1加速 20%

//写法1
i = x < 0 ? -x : x;

//写法2

i = (x ^ (x >> 31)) - (x >> 31);

//写法3

i=x^(~(x>>31)+1)+(x>>31);

9. 比较两数值相乘之后是否拥有相同的符号,加速 35%

eqSign = a * b > 0;
//equals:
eqSign = a ^ b > 0;

其它位运算技巧
1. RGB 色彩分离

var 24bitColor:uint = 0xff00cc;
var r:uint = 24bitColor >> 16;
var g:uint = 24bitColor >> 8 & 0xFF;
var b:uint = 24bitColor & 0xFF;

2. RGB 色彩合并

var r:uint = 0xff;
var g:uint = 0x00;
var b:uint = 0xcc;
var 24bitColor:uint = r << 16 | g << 8 | b;

 

ps——尤其是在嵌入式中,位运算尤为重要!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/510484.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

菜鸟 CPaaS 平台微服务治理实践

背景 CPaaS&#xff08;cainiao platform as a service&#xff09;是以公有云为基座&#xff0c;结合先进的云原生理建设的企业级 DevOps 的 PaaS 平台&#xff0c;CPaaS 主要目前主要支持的场景&#xff1a;菜鸟生态的云上研发运维、菜鸟公有云 SaaS 化的能力透出、菜鸟商业…

RocketMQ 消息集成:多类型业务消息-普通消息

引言 Apache RocketMQ 诞生至今&#xff0c;历经十余年大规模业务稳定性打磨&#xff0c;服务了 100% 阿里集团内部业务以及阿里云数以万计的企业客户。作为金融级可靠的业务消息方案&#xff0c;RocketMQ 从创建之初就一直专注于业务集成领域的异步通信能力构建。本篇将从业务…

【总结】字符串匹配: KMP 和 拓展KMP

比起ac自动机,kmp就一个next数组,理解了如何初始化next后就可以搞一些模板题了,下面是还不错的学习资料,清晰易懂,自己用的模板也来自它: http://chaoswork.com/blog/2011/06/14/kmp%E7%AE%97%E6%B3%95%E5%B0%8F%E7%BB%93/ kmp模板 next[0]-1;j-1; for(i0;i<m;) {while(j>…

排序算法总结与C代码

最近参加笔试&#xff0c;感觉排序算法需要好好的整理一下&#xff0c;感觉部分排序算法理解得不是很清楚&#xff1b;通过这段时间的整理与总结来对排序算法的一个复习吧。 主要参考了《大话数据结构》&#xff1a; 1. 冒泡排序的基本思想&#xff1a;两两比较相邻记录的关键字…

最小生成树(普利姆算法、克鲁斯卡尔算法)

给定一个带权的无向连通图,如何选取一棵生成树,使树上所有边上权的总和为最小,这叫最小生成树. 求最小生成树的算法 (1) 克鲁斯卡尔算法 图的存贮结构采用边集数组,且权值相等的边在数组中排列次序可以是任意的.该方法对于边相对比较多的不是很实用,浪费时间. (2) 普里姆算法 图…

《数字化与碳中和(园区篇)》报告正式发布,助力加快推进国家“双碳”战略实施

2021年10月&#xff0c;国务院印发《2030年前碳达峰行动方案》&#xff0c;明确提出要建设绿色低碳园区&#xff0c;并选择100个具有典型代表性的城市和园区开展碳达峰试点建设&#xff0c;在政策、资金、技术等方面对试点城市和园区给予支持。此后&#xff0c;碳达峰、碳中和正…

基于开放共享的自主研发—MaxCompute 持续增强生态与开放性建设

MaxCompute产品与生态架构 MaxCompute是一个具有先进架构的Serverless云数据仓库&#xff0c;自从商业化后&#xff0c;使用的用户涉及各个行业的头部客户。在生态上需要支持主流的开源产品以及阿里云云产品。其主要包括以下几个方面&#xff1a; 数据接入生态。目前官方提供…

还是畅通工程(思想+代码)

Description 某省调查乡村交通状况&#xff0c;得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通&#xff08;但不一定有直接的公路相连&#xff0c;只要能间接通过公路可达即可&#xff09;&#xff0c;并要求铺设…

构建数据中台的组织架构

一、中台是一种企业架构 1.TOGAF企业架构标准 TOGAF是一套企业架构标准。企业架构是指整个公司或企业的软件和其他技术的整体观点和方法。企业架构又细分为业务架构、应用架构、数据架构、技术架构几个方向。 其中业务架构的定义是“定义业务战略和组织&#xff0c;关键业务…

源于加速,不止加速——10年沉淀,破局改变

20余年技术&#xff0c;面临破局。CDN(Content Delivery Network&#xff0c;内容分发网络) 是一个超大规模的分布式系统&#xff0c;为互联网各类App和Web站点提供动 / 静态内容、实时流媒体加速以及网络安全防护等能力。在线购物、直播、音乐、游戏、社交等等一切&#xff0c…

C++注释符问题

#include<iostream>using namespace std;int main(){std::cout<<"/*";std::cout<<"*/";std::cout<</*"*/"*/;std::cout<</*"*/"/*"/*"*/;return 0;} 运行出错&#xff0c;第二行无法识别[Wa…

5分钟让你在大火的多模态领域权威榜单VQA上超越人类

ModelScope上开源了达摩院众多业界最强多模态模型&#xff0c;其中就有首超人类的多模态预训练视觉问答模型mPLUG&#xff0c;小编激动的搓搓小手&#xff0c;迫不及待的体验了一下。 一探&#xff1a;浅草才能没马蹄 市面上有好多号称“用户上手简单”&#xff0c;“一步到位…

表达式类型出错

#include<iostream>using namespace std;int main(){int a-1;unsigned b1;cout<<a*b<<endl;return 0;} 编译结果为一个随机数&#xff0c;因为a&#xff0c;b分别为带符号类型和无符号型整数。

私有化输出的服务网格我们是这样做的

介绍 微服务开发的问题 微服务架构下我们在开发中遇到的常见的问题有以下 4 个&#xff1a; 多语言问题&#xff1a;有多种编程语言&#xff0c;node.js, JAVA, GoLang…微服务需要为每种语言都维护一种中间件 SDK升级推动难&#xff1a;SDK 升级需要推动业务应用进行代码修…

技术解读:Dragonfly 基于 P2P 的智能镜像加速系统

背景 网络下载 提起网络下载领域&#xff0c;你应该首先会想到基于 TCP/IP 协议簇的 C/S 模式。这种模式希望每一个客户机都与服务器建立 TCP 连接&#xff0c;服务器轮询监听 TCP 连接并依次响应&#xff0c;如下图&#xff1a; 上世纪末期&#xff0c;基于 C/S 模式的思想&…

多行书写的字符串字面值

#include<iostream>using namespace std;int main(){cout<<"Hello Word!""Best Coder!"<<endl;return 0;}

c++中值得初始化

代码中四种初始化&#xff0c;a中都为0 #include<iostream> using namespace std;int main(){int a0;cout<<a<<endl;int a1{0};cout<<a1<<endl;int a2{0};cout<<a2<<endl;int a3(0);cout<<a3<<endl;return 0;}

Kruise Rollout:灵活可插拔的渐进式发布框架

前言 Kruise Rollout 是 OpenKruise 社区开源的渐进式交付框架。Kruise Rollout 支持配合流量和实例灰度的金丝雀发布、蓝绿发布、A/B Testing 发布&#xff0c;以及发布过程能够基于 Prometheus Metrics 指标自动化分批与暂停&#xff0c;并提供旁路的无感对接、兼容已有的多…

最小生成树的Prime算法的思想

Prime算法的核心步骤是&#xff1a;在带权连通图中V是包含所有顶点的集合&#xff0c; U已经在最小生成树中的节点&#xff0c;从图中任意某一顶点v开始&#xff0c;此时集合U{v}&#xff0c;重复执行下述操作&#xff1a;在所有u∈U,w∈V-U的边(u,w)∈E中找到一条权值最小的边…

c++引用“”

常见的是“左值引用”在c11中新增了“右值引用” 引用&#xff1a;为对象起另外一个名字&#xff0c;引用类型引用另外一种类型。通过声明符写成&d的形式来定义引用类型&#xff0c;其中d是引用类型名。 例如&#xff1a; int a1024; int &ba;//那么b就等于a的值了…