移位运算「建议收藏」

移位运算「建议收藏」【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)
上一篇 2022年7月4日 下午12:16
下一篇 2022年7月4日 下午12:36


相关推荐

  • OpenClaw 本地部署详细教程(Windows+Mac 双系统)

    OpenClaw 本地部署详细教程(Windows+Mac 双系统)

    2026年3月13日
    3
  • 名片设计大全:15款创意设计的名片模板

    名片设计大全:15款创意设计的名片模板每一个公司都需要有一款创造性的 引人注目的名片 设计师们也一直在寻找新的设计概念 今天我们选择了 15 款高质量的专业的名片设计模板 这些精美的名片作品展示了设计师的创意和思想智慧 您可能感兴趣的相关文章名片制作 25 款现代名片设计实例及模板创意无限 25 款很酷的高档名片设计欣赏 50 款免费 PSD 名片设计模板源文件下载创意名片 一组精美的折叠效果名片设计 30 佳别具

    2025年8月30日
    6
  • 签名设计手写简单_怎么写自己的签名

    签名设计手写简单_怎么写自己的签名首语:大家好,很多人都想设计一个简单的艺术签名,所以就有人开始找【签名设计手写简单】,这其实对于设计师来说的很简单的事情。写字的时候也有简单的时候,也有复杂的时候。真的需要怎么去取舍,这就要看你是如何去选择了。签名设计手写简单首先说一下,三秒艺术签名网的所有签名都是手写完成的,大家这一点不要质疑。其次是说到简单,其实写签名就是要让名字变得简单,好写,这样才会让人感觉,舒畅。但是不是什么字都能被写的简单的,这需要考虑一个文字的笔画多少程度,举个例子“饕餮”这两个字就不好去做简化。像,明啊,等啊,峰啊

    2025年9月22日
    9
  • 什么是单模光纤和多模光纤的区别

    什么是单模光纤和多模光纤的区别单模光纤和多模光纤主要从核心直径 光源 带宽 护套颜色 模态色散 价格六个方面来区分 一 核心直径单模光纤 典型的单模光纤是 8 和 10 m 的纤芯直径 包层直径为 125 m 多模光纤 通常的多模光纤是 50 和 62 5 m 的纤芯直径 包层直径为 125 m 二 光源单模光纤 以激光器作为光源 价格相较 LED 光源更贵 激光光源产生的光可以精确的控制 具有高的功率 多模光纤 以 LED

    2026年3月26日
    2
  • c语言枚举类型enum例子_枚举是什么意思

    c语言枚举类型enum例子_枚举是什么意思在实际的编程应用中,有的变量只有几种可能的取值,譬如说一个星期的七种可能,性别的两种可能等等。C语言为这种类型的变量的定义提供了enum关键字。要使用枚举类型的变量,首先需要先定义一个枚举类型名,然后再声明该变量是枚举类型的例如:enumweekday{\\该语句定义了一个`枚举类型`MONDAY,TUSEDAY,WEDNESDAY,…

    2025年8月19日
    4
  • spring使用aspectj_你可知晓

    spring使用aspectj_你可知晓【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)http://blog.csdn.net/javazejian/article/details/54629058出自【zejian的博客】关联文章:关于SpringIOC(DI-依赖注入)你需要知道的一切关于SpringAOP(AspectJ)你该知晓的一切本篇是年后第一篇博文,由于博主用了不少

    2022年8月11日
    11

发表回复

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

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