博客
关于我
C:位运算之 左移运算和右移运算
阅读量:204 次
发布时间:2019-02-28

本文共 796 字,大约阅读时间需要 2 分钟。

C语言中的位运算之左移与右移

在C语言中,位运算包括左移和右移两种基本操作。左移运算符<<和右移运算符>>,在处理有符号数和无符号数时,行为存在显著差异。

有符号数的左移与右移

对于有符号整数,左移和右移的操作方式与无符号数有所不同。以下是具体行为规则:

  • 左移运算(<<

    • 不论数值是正还是负,左移操作都直接丢弃最高位,并在低位补充相应数量的0。
    • 例如,假设有符号整数值为0x12345678,左移4位后结果为0x23456780
    • 如果数值为负数,例如0xFEDCBA98,左移4位后结果为0x0EDCBA98(需要补充4个0)。
  • 右移运算(>>

    • 有符号数的右移操作与左移不同,它会保留原来的符号位。
    • 右移时,直接丢弃最低位,并在高位补充相应数量的0。
    • 例如,负数0xFEDCBA98右移4位后结果为0xFFEDCBA9,高位补充的0并未改变符号位的值。
  • 无符号数的左移与右移

    无符号数的移位操作与有符号数不同,主要体现在以下几个方面:

  • 左移运算(<<

    • 左移直接丢弃最高位,并在低位补充相应数量的0。
    • 无论原始值的最高位是0还是1,左移后的结果都不会改变符号。
  • 右移运算(>>

    • 无符号数的右移操作总是补充0到高位。
    • 即使原始值的最高位是1,右移后高位也会被补充为0。
    • 例如,0xFEDCBA98右移4位后结果为0x0FEDCBA9
  • 左右移操作的对比

    通过以上分析可以看出,移位操作在有符号数和无符号数中的行为存在明显差异:

  • 无符号数

    • 右移时,高位总是补充0。
    • 左移时,高位会被丢弃,低位补充0。
  • 有符号数

    • 右移时,高位会被保留(即符号位不变)。
    • 左移时,高位会被丢弃,低位补充0。
  • 左移操作

    • 无论是有符号数还是无符号数,左移都丢弃最高位并补充0。
  • 这种差异说明,在处理移位操作时,必须明确处理的数值类型是有符号数还是无符号数。这对于编写高效且正确的位操作程序至关重要。

    转载地址:http://oxgs.baihongyu.com/

    你可能感兴趣的文章
    poj3307
    查看>>
    Qt笔记——QString与隐式共享、MVC架构
    查看>>
    Qt笔记——QSemaphore处理生产者/消费者模式
    查看>>
    Qt笔记——QMutex&QWaitCondition处理生产者消费者模式
    查看>>
    Qt笔记——QLable+QPixmap图片缩放踩坑
    查看>>
    Qt笔记——foreach与forever
    查看>>
    QT程序怎么挪到Linux下,linux+Qt程序如何打包发布
    查看>>
    Qt知识:视图框架QGraphicsWidget详解
    查看>>
    SpringBoot中项目启动及定时任务缓存数据库常用数据至内存变量并转换后高频调用
    查看>>
    Qt知识: 画刷风格
    查看>>
    QT的OpenGL渲染窗QOpenGLWidget Class
    查看>>
    QT的C++程序加载动态链接库DLL(Linux下是so)的方式
    查看>>
    QT界面操作1:如何跟踪鼠标位置?
    查看>>
    Qt环境搭建(Visual Studio)
    查看>>
    QT点击"X"按钮,调用closeEvent()函数来实现调用特定事件(附:粗略介绍QT的信号与槽的使用方法)...
    查看>>
    QT样式表——url路径
    查看>>
    QT数据库(三):QSqlQuery使用
    查看>>
    QT教程5:消息框
    查看>>
    SpringBoot中集成阿里开源缓存访问框架JetCache实现声明式实例和方法缓存
    查看>>
    pom.xml中提示web.xml is missing and <failonmissingw>...
    查看>>