移位运算「建议收藏」

移位运算「建议收藏」【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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • kong 网关 修改返回数据_kong网关教程

    kong 网关 修改返回数据_kong网关教程一、简介路由用来匹配客户端向上游服务器请求的规则,也就是客户端调用的API,每个路由(Route)和一个服务(Service)相关联,一个服务可有有多个路由,我们可以对每一条路由进行细粒度的配置,可以使用正则表达式进行通用的配置。二、重要属性创建一个路由需要配置的属性,其中路径paths为必须设置,其余为可选。AttributesDescriptionname…

    2022年9月10日
    0
  • 桶排序算法c语言_哪种排序算法最快

    桶排序算法c语言_哪种排序算法最快在前几回我们已经对冒泡排序、直接插入排序、希尔排序、选择排序、快速排序、归并排序、堆排序、计数排序做了说明分析(具体详情可在公众号历史消息中查看)。本回,将对桶排序进行相关说明分析。一、排序算法系列目录说明冒泡排序(BubbleSort)插入排序(InsertionSort)希尔排序(ShellSort)选择排序(SelectionSort)快速排序(Quick…

    2022年10月23日
    1
  • Anti SQL Inject

    Anti SQL Inject

    2021年7月31日
    49
  • PAL制式和NTSC制式的区别「建议收藏」

    PAL制式和NTSC制式的区别「建议收藏」常见的电视信号制式是PAL和NTSC,另外还有SECAM等。NTSC即正交平衡调幅制。PAL为逐行倒像正交平衡调幅制。什么是PAL制式呢?什么是NTSC制式?简单的说,NTSC和PAL属于全球两大

    2022年8月1日
    1
  • 常用八大测试用例设计方法有哪些_测试用例编写方法

    常用八大测试用例设计方法有哪些_测试用例编写方法1、等价类划分(EquivalancePartitioning)测试的思想:将程序的输入域划分为若干个区域(等价类),并在每个等价类中选择一个具有代表性的元素生成测试用例。该方法是常用的黑盒(BlackboxTesting)测试用例(Testcase)设计方法。等价类划分可有两种不同的情况:有效等价类和无效等价类。有效等价类是指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合,它能检验程序是否可以实现规格说明中所规定的功能需求。无效等价类是指对程序的规格说明是不合理的或无意义的输入数据所

    2022年10月12日
    0
  • AndroidTv Home界面实现原理(一)——Leanback 库的使用[通俗易懂]

    AndroidTv Home界面实现原理(一)——Leanback 库的使用[通俗易懂]本篇文章已授权微信公众号dasu_Android(大苏)独家发布接下去应该是梳理一下AndroidTv主界面实现原理及解析的一个系列博客了,大体上的安排是先介绍Google官方提供的L

    2022年7月1日
    20

发表回复

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

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