zoukankan      html  css  js  c++  java
  • c++之五谷杂粮---1

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

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

    Bitwise Operators (Left Associative)

    1.1

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

    err eg:

      

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

    1.1.1

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

    summary:

    见上Best Practices。

    题外话:

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

  • 相关阅读:
    html input在标签内设置禁止输入空格
    JS判断json是否为空
    python常见问题集锦
    Node.js入门教程合集
    Vue入门教程合集
    将博客搬至CSDN
    Python 使用PyInstaller打包发布
    VSCode开发Python
    Python 验证码解析
    IntelliJ IDEA常见问题及使用技巧(持续更新)
  • 原文地址:https://www.cnblogs.com/yangguang-it/p/6362867.html
Copyright © 2011-2022 走看看