移位运算「建议收藏」

移位运算「建议收藏」【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.

顺序 选择  循环 总结

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • ubuntu 20.04 安装中文输入法_ubuntu20.04安装中文输入法

    ubuntu 20.04 安装中文输入法_ubuntu20.04安装中文输入法在安装ubuntu时,如果选择英文安装,默认会不启用中文输入法的。可以通过下述方法开启:在settings的Region&amp;amp;amp;amp;amp;amp;Language的InputSources设置栏中点击+添加Chinese(IntelligentPinyin)最后,重启后使之生效。…

  • Parallel.ForEach 使用多线程遍历循环

    Parallel.ForEach 使用多线程遍历循环原地址路径:https://www.cnblogs.com/personblog/archive/2019/10/09/11640801.htmlParallel.ForEach相对于foreach是多线程,并行操作;foreach是单线程循环操作。staticvoidMain(string[]args){Console.WriteLine(“HelloWorld!”);List<UserInfo>lst=n

  • MySQL生产环境主从关系数据不同步

    MySQL生产环境主从关系数据不同步

  • python和java哪个值得学-Python和Java学哪个好?大家是怎么选的

    python和java哪个值得学-Python和Java学哪个好?大家是怎么选的Python和Java学哪个好?很多开始学习编程的同学就很难选择,过去几年选择Java无话可说,近年来大家都开始关注人工智能这一方向,都觉得人工智能是未来的趋势,选择Java就会和人工智能失之交臂,确实,但大家要知道,想从事人工智能方面的工作,学的可不只有Python,更需要你会各种复杂的计算,数据分析,推演,超强的思维等等。Java是一门成熟发展20多年编程语言,开发使用率极高,目前java市场…

  • solidworks第三方插件_django queryset合并

    solidworks第三方插件_django queryset合并前言mixins翻译成中文是混入,组件的意思。在DRF中,针对获取列表,检索,创建等操作,都有相应的mixin,一般我们自定义创建的类视图都会继承自GenericAPIView和Mixins一起使用

  • mysql读写分离配置

    mysql读写分离配置mysql读写分离配置随着网站访问和请求量的增加,单台数据库服务器的连接已耗尽,会出现连接请求还在等待,或是数据库服务器崩溃等现象,这时候我们考虑如何减少数据库的连接,可以通过优化代码、使用缓存、数据库读写分离等方式解决此问题。 什么是读写分离:将数据库的读、写操作分别作用到不同的数据库(不同物理机)上。 适用场景:读操作远大于写操作,包含大量复杂统计、离线计算等任务(比如定时按各维度对数…

发表回复

您的电子邮箱地址不会被公开。

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