移位运算「建议收藏」

移位运算「建议收藏」【1】示例代码项目应用示例:【2】分析图解移位运算分析:【3】移位运算位运算应用口诀:清零取位要用与,某位置一可用或;若要取反和交换,轻轻松松用异或。【4】与移位运算有关的操作符优先级问

大家好,又见面了,我是你们的朋友全栈君。

【1】示例代码

项目应用示例:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 #define CYCLE_DATA_KEY(baseCycleId, type, elementId)            (((baseCycleId) << 16) | ((type) << 14) | ((elementId) << 8))
 5 #define BASE_CYCLE_ID(dataKey)                                  (((dataKey) >> 16) & 0xFFFF)
 6 #define DATA_TYPE(dataKey)                                      (((dataKey) >> 14) & 0x3)
 7 #define ELEMENT_ID(dataKey)                                     (((dataKey) >> 8) & 0x3F)
 8 
 9 void main()
10 {
11     int nConfig = CYCLE_DATA_KEY(2, 2, 2);
12     cout << "nConfig :: " << nConfig << endl;
13     cout << "BASE_CYCLE_ID :: " << BASE_CYCLE_ID(nConfig) << endl;
14     cout << "DATA_TYPE :: " << DATA_TYPE(nConfig) << endl;
15     cout << "ELEMENT_ID :: " << ELEMENT_ID(nConfig) << endl;
16     system("pause");
17 }
18 
19 // run out:
20 /*
21 nConfig :: 164352
22 BASE_CYCLE_ID :: 2
23 DATA_TYPE :: 2
24 ELEMENT_ID :: 2
25 请按任意键继续. . .
26 */

【2】分析图解

移位运算分析:

移位运算「建议收藏」

 

【3】移位运算

位运算应用口诀:

清零取位要用与,某位置一可用或;若要取反和交换,轻轻松松用异或。

【4】与移位运算有关的操作符优先级问题

示例代码如下:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 void main()
 5 {
 6     cout << "value1 :: " << (1 << 2 + 3 << 4) << endl;
 7     cout << "value2 :: " << (1 << 2) + (3 << 4) << endl;
 8     system("pause");
 9 }
10 
11 // run out:
12 /*
13 value1 :: 512
14 value2 :: 52
15 请按任意键继续. . .
16 */

常常有人会写这样的表达式:1 << 2 + 3 << 4,其本意是(1 << 2) + (3 << 4)。

但在C语言中,前面的表达式等价于1 << (2 + 3) << 4,这是由于加法(和减法)的优先级比移位运算要高。

然后,按照从左至右结合性规则,括号应该是这样打的(1 << (2 + 3)) << 4,因此得到的结果是512,而不是期望的52。

在C表达式中搞错优先级是一种常见的程序错误,而且常常很难检查出来。所以当你拿不准的时候,请加上括号!

 

Good Good Study, Day Day Up.

顺序 选择  循环 总结

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154425.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 区别 git clone 与 git pull

    区别 git clone 与 git pull1、gitclone与gitpull相同点相同点:都是从远程服务器拉取代码到本地2、gitclone与gitpull不同点gitclone是在本地没有版本库的时候,从远程服务器克隆整个版本库到本地,是一个本地从无到有的过程。gitpull在本地有版本库的情况下,从远程库获取最新commit数据(如果有的话),并merge(合并)到本地。gitpull=…

    2022年7月21日
    12
  • jupyter如何运行代码_python jupyter notebook安装

    jupyter如何运行代码_python jupyter notebook安装python-mpipinstall–upgradepippython3-mpipinstall–upgradepip

    2022年10月8日
    1
  • 代价函数总结[通俗易懂]

    代价函数总结[通俗易懂]代价函数是学习模型优化时的目标函数或者准则,通过最小化代价函数来优化模型。到目前为止,接触了一些机器学习算法,但是他们使用的代价函数不一定是一样的,由于,在现实的使用中,通常代价函数都需要自己来确定,所以,这里总结一下,代价函数都有哪些形式,尽量揣测一下,这样使用的原因。1.均方差代价函数这个是Andrewng的机器学习课程里面看到的损失函数,在线性回归模型里面提出来的。表示模型所预测(假设

    2022年4月29日
    44
  • android倒计时功能的实现(CountDownTimer)[通俗易懂]

    android倒计时功能的实现(CountDownTimer)[通俗易懂]在逛论坛的时候,看到一个网友提问,说到了CountDownTimer这个类,从名字上面大家就可以看出来,记录下载时间。将后台线程的创建和Handler队列封装成一个方便的类调用。    查看了一下官方文档,这个类及其简单,只有四个方法,上面都涉及到了onTick,onFinsh、cancel和start。其中前面两个是抽象方法,所以要重写一下。         下面是官方给的一个小例子:ne

    2022年9月18日
    2
  • Flowable深入浅出-1 Flowable简介

    Flowable深入浅出-1 Flowable简介1Flowable简介什么是BPMN什么是FlowableFlowable官网、开源社区Flowable流程示例什么是BPMN先来看下百度百科的定义:由BPMI(TheBusinessProcessManagementInitiative)开发了一套标准叫业务流程建模符号(BPMN-BusinessProcessModelingNotation)。在BPMINotat…

    2022年5月21日
    104
  • stm32f103c8t6数据手册「建议收藏」

    stm32f103c8t6数据手册「建议收藏」STM32F103ZET6(中文)-豆丁网(docin.com)https://www.docin.com/p-304006862.html?docfrom=rrela

    2022年10月15日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号