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. memcached缓存基本概念

    Memcached是一套分布式内存对象缓存系统. 用于在动态应用系统中缓存数据库的数据,减少数据库的访问压力,达到提升网站系统性能的目的:memcached在企业应用场景中一般是用来作为数据库的cac ...

  2. zabbix3.0 安装时出现PHP Parse error: syntax error

    httpd的错误日志 [Sun Mar :: ] [error] [client 由于系统yum默认安装的php版本是5.3.3 zabbix 3.0支持的平台,只支持php5.4以上的版本https ...

  3. 树莓派 SD卡镜像备份

    一.准备工作 1.已经配置启动的树莓派SD卡 2.Linux系统的pc 3.读卡器 二.修改SD卡文件 刚开始我先再win7下把SD卡接到pc上,发现无法读取.用DISKGENIUS查看pc的磁盘状态 ...

  4. JavaScript三种方式改变标签css

    原文地址:https://www.cnblogs.com/xiangru0921/p/6514225.html <body> <div id="div">这 ...

  5. 【Redis源代码剖析】 - Redis内置数据结构之字典dict

    原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/51018337 今天我们来讲讲Redis中的哈希表. 哈希表在C++中相应的是ma ...

  6. Gradle 1.12用户指南翻译

    http://blog.csdn.net/maosidiaoxian/article/category/2219983

  7. c 常见错误

    ."c" not an argument in function sum 该标识符不是函数的参数2.array bounds missing ] in function main ...

  8. PHP+FastCGI+Nginx配置PHP运行环境方法

    PHP+FastCGI+Nginx配置PHP运行环境 Nginx不支持对外部程序的调用,所以必须通过FastCGI接口实现对外部程序的调用从而实现对客户端动态页面请求的处理. CGI的英文全称为Com ...

  9. 如何设置Linux swap分区

    看到不少朋友问linux下swap分区的问题,收集到一篇 不错的文章 ,分享下.什么是Swap?Swap,即交换区,除了安装Linux的时候,有多少人关心过它呢?其实,Swap的调整对Linux服务器 ...

  10. OpenVSwitch 硬件加速浅谈

    https://zhuanlan.zhihu.com/p/57870521 本文首发SDNLAB. 现代的虚拟化技术使得开发和部署高级网络服务变得更加简单方便.基于虚拟化的网络服务,具有多样性,低成本 ...