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

    你可能感兴趣的文章
    pandas去除Nan值
    查看>>
    pandas实战:电商平台用户分析
    查看>>
    Pandas库常用方法、函数集合
    查看>>
    pandas打乱数据的顺序
    查看>>
    pandas指定列数据归一化
    查看>>
    pandas改变一列值(通过apply)
    查看>>
    Pandas数据分析的环境准备
    查看>>
    Pandas数据可视化怎么做?用实战案例告诉你!
    查看>>
    Pandas数据处理与分析教程:从基础到实战
    查看>>
    Pandas数据结构之DataFrame常见操作
    查看>>
    pandas整合多份csv文件
    查看>>
    pandas某一列转数组list
    查看>>
    Pandas模块,我觉得掌握这些就够用了!
    查看>>
    Pandas玩转文本处理!
    查看>>
    SpringBoot 整合 Mybatis Plus 实现基本CRUD功能
    查看>>
    pandas的to_sql方法中使用if_exists=‘replace‘
    查看>>
    Springboot ppt转pdf——aspose方式
    查看>>
    pandas读取parquet报错
    查看>>
    pandas读取数据用来深度学习
    查看>>
    Pandas进阶大神!从0到100你只差这篇文章!
    查看>>