1.  位运算符,如果运算对象是带符号的且它的值为负,那么位运算符如何处理运算对象的“符号位”依赖于机器。此时左移操作可能会改变符号位的值,因此是一种UB。

Best Practices: 关于符号位如何处理没有明确的规定,所以强烈建议仅将位运算用于处理无符号类型。

Bitwise Operators (Left Associative)

1.1

  <<(左移),>>(右移)的右侧运算符对象一定不能为负,而且值必须严格的小于结果的位数,否则将产生UB。

err eg:

  

int test=0x1234;
test <<=-;//移动位数为负 *UB*
//在int 为4字节32位的机器上
test >>=;//右移32位,错误,范围0-31

1.1.1

左移运算符在右侧插入值为0 的二进制位,右移运算符的行为则依赖于左侧运算对象的类型,无符号类型,右移在左侧插入0的二进制位,有符号类型,在左侧插入符号位的副本或者值为0的二进制位。

summary:

见上Best Practices。

题外话:

如果在大型程序中某些程序由很多人开发而来,且其中一些贯穿全局的变量为有符号的,而你的开发又确实需要进行右移操作,那么你应该测试你当前环境的右移行为是什么样的并给予备注,提醒后来的开发维护人员。

c++之五谷杂粮---1的更多相关文章

  1. c++之五谷杂粮---3

    3.1如果同一作用域内的几个函数名字相同但形参列表不同,我们称之为重载函数. 3.1.1不允许两个函数除了返回类型外所有的要素都相同.(这也是很好解释的) #include<iostream&g ...

  2. c++之五谷杂粮---2

    2.1  我们通过调用运算符(call operator)来执行函数.调用运算符的形式是一对圆括号,它作用于一个表达式,该表达式是函数或者指向函数的指针:圆括号之内是用逗号隔开的实参列表,我们用实参初 ...

  3. c++之五谷杂粮4---explicit

    4.1在要求隐式转换的程序上下文中,我们可以通过将构造函数声明为explicit加以阻止. 关键字explicit只对一个实参的构造函数有效.需要多个实参的构造函数不能用于执行隐式转换,所以无需将这些 ...

  4. make——五谷杂粮

  5. 【转】2013年中国IT业10大公司

    转自:http://www.chinaz.com/news/2013/1217/331446.shtml?zyy 1.最得志的公司:小米 在2013年,再没有一家公司像小米这样志得意满,即便看看所有的 ...

  6. 关于Java中的对象、类、抽象类、接口、继承之间的联系

    关于Java中的对象.类.抽象类.接口.继承之间的联系: 导读: 寒假学习JavaSE基础,其中的概念属实比较多,关联性也比较大,再次将相关的知识点复习一些,并理顺其中的关系. 正文: 举个例子:如果 ...

  7. 一年一度!GitHub 开发者大会「GitHub 热点速递 v.22.45」

    GitHub 是全球最大的开源社区,它的一举一动都深受每一位开源爱好者的关注.这周末刚落下帷幕的<GitHub Universe 2022>是 GitHub 发布最新产品.功能.报告和计划 ...

  8. 从一道NOI练习题说递推和递归

    一.递推: 所谓递推,简单理解就是推导数列的通项公式.先举一个简单的例子(另一个NOI练习题,但不是这次要解的问题): 楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可 ...

  9. 《OOC》笔记(0)——为何要看这本书

    <OOC>笔记(0)——为何要看这本书 <OOC>全名是<Object-oriented Programming with ANSI-C>,作者Axel-Tobia ...

随机推荐

  1. apache日志记录格式LogFormat参数说明

    在apache的配置文件httpd.conf里一般都有类似于LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Refere ...

  2. Redis学习之路(001)- Redis介绍以及安装(Linux)

    redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcached类似,但很大程度补偿了memcached的不足,它支持存储的value类型相对更多,包括strin ...

  3. 【SqlServer】SqlServer存储过程使用

    我们一开始学习数据库语言的时候就是用一些简单的insert,select等语法,但是随着我们学习数据库的深入,就会发现一些简单的语法满足不了我们的要求,比如处理一些业务逻辑,多表关联的时候,还有就是虽 ...

  4. 【js】在js中加HTML注释标签的原因?

    <script type="text/JavaScript"> <!-- js代码 //--> //就是这句,为什么还要在-->前加上js注释 < ...

  5. 谁说C语言很简单?

    前两天,Neo写了一篇<语言的歧义>其使用C语言讨论了一些语言的歧义.大家应该也顺便了解了一下C语言中的很多不可思异的东西,可能也是你从未注意到的东西. 是的,C语言并不简单,让我们来看看 ...

  6. java与C++之间进行SOCKET通讯要点简要解析

    原文链接: http://blog.csdn.net/hslinux/article/details/6214594 java与C++之间进行SOCKET通讯要点简要解析 hslinux 0.篇外语 ...

  7. Android Developers:绘制9-patch图片

    绘制9-patch图片工具让你使用可见即可得(WYSIWYG)编辑器轻松创建Nine Patch图像. 关于介绍Nine-path图片和它是如何工作的,请在2D Graphics的文档中查阅关于Nin ...

  8. Socket编程知识必学

    端口号常识:    端口号被从1 开始分配.    通常端口号超出255 的部分被本地主机保留为私有用途.    1到255 之间的号码被用于远程应用程序所请求的进程和网络服务.    每个网络通信循 ...

  9. Appium升级后安装UnicodeIME-debug.apk 提示

    使用appium1.8 ,启动app过程中报错: 2018-05-08 17:09:16:890 - [W3C] Encountered internal error running command: ...

  10. 使 Inno Setup 打包出的安装程序以管理员身份运行

    找到 Inno Setup 安装目录下的 SetupLdr.e32 文件,用 Resource Hacker 将其中的 Manifest 修改一下: 改为: <requestedExecutio ...