博客
关于我
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/

    你可能感兴趣的文章
    postman的使用
    查看>>
    Postman的使用说明
    查看>>
    Postman被低估的功能 — 自动化接口测试
    查看>>
    Postman被低估的功能 — 自动化接口测试
    查看>>
    Postman轻松签名,让SHA256withRSA保驾护航
    查看>>
    Postman还能做Mock?又学了一招!
    查看>>
    Postman还能做Mock?又学了一招!
    查看>>
    postman进行http接口测试
    查看>>
    Postman高阶技能:Collection集合批量运行!
    查看>>
    postMessage跨标签页共享数据
    查看>>
    QImage对一般图像的处理
    查看>>
    post为什么会发送两次请求?
    查看>>
    Post表单提交TextArea的值出现转译乱码问题 - Spring MVC处理表单提交
    查看>>
    Power BI 中的 Python 可视化需要什么设置?任何特定的 matplotlib 包版本或系统设置?
    查看>>
    Power BI:如何在 Power Query 编辑器中将 Python 与多个表一起使用?
    查看>>
    power english (3) main text -emotion mastery - focus
    查看>>
    POWER ENGLISH (6) - MODEL
    查看>>
    power english (1) —— passion
    查看>>
    Power English (1) 原文
    查看>>
    power English (3)原文
    查看>>