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

    你可能感兴趣的文章
    php时间戳知识点,php 时间戳函数总结与示例
    查看>>
    PHP查找数组中最大值与最小值
    查看>>
    php查最大值,在PHP数组中查找最大值
    查看>>
    php标签筛选,关于PHP CodeIgniter框架中通过<a>标签和url做多条件分类筛选
    查看>>
    php根据年月日计算年龄
    查看>>
    RabbitMQ - 单机部署(超详细)
    查看>>
    php检查注册,PHP检查注册的电子邮件地址是一个’school.edu’地址
    查看>>
    php模拟发送GET和POST请求
    查看>>
    php模板引擎smarty
    查看>>
    php正则表达式的特殊字符含义
    查看>>
    PHP水仙花问题解法之一
    查看>>
    php没有解析是怎么回事,linux下php文件没有被剖析怎么办?_后端开发
    查看>>
    php注册页面实现注册后跳转页面
    查看>>
    PHP消息队列的实现方式与详解,值得一看
    查看>>
    PHP混合Go协程并发
    查看>>
    php源码中如何添加滚动公告,给WordPress网站添加滚动公告的方法
    查看>>
    php漏洞tips
    查看>>
    php版Zencoding之 phpstorm
    查看>>
    PHP版本升级5.4手记
    查看>>
    php版本微信公众号开发
    查看>>