C++:左移和右移运算符 (> > 和 < <)

本文介绍了C++中的左移(<<)和右移(>>)运算符,详细阐述了它们的语法、注意事项、左移和右移的原理,以及移位和提升的概念。对于有符号和无符号数字,左移和右移的处理方式有所不同,特别是负数右移的结果依赖于具体实现。文章还强调了当移位表达式超出范围时,结果是不确定的。
摘要由CSDN通过智能技术生成

C++:左移和右移运算符 > > 和 < <

简介

按位移位运算符是右移位运算符 (>>) ,它将 shift 表达式 的位移动到右侧,左移运算符 (<<) ,这将向左移动 移位表达式 的位数。

语法

移位表达式 <<加法表达式
shift-expression >> additive-expression

备注

重要
以下说明和示例在 Windows 上适用于 x86 和 x64 体系结构。 对于 ARM 设备,左移运算符和右移位运算符的实现在很大程度上是不同的。

左移

左移运算符使 shift 表达式 中的位向左移动由 加法表达式 指定的位置数。 因移位运算而空出的位上将用零填充。 左移是逻辑移动(从末端移掉的位将被舍弃,包括符号位)

以下示例将显示使用无符号数字的左移运算。 该示例通过将值表示为 bitset 来显示对位的操作。

#include <iostream>
#include <bitset>

using namespace std;

int main() {
   
    unsigned short short1 = 4;
    bitset<16> bitset1{
   short1};   // the bitset representation of 4
    cout << bitset1 << endl;  // 0b00000000'00000100

    unsigned short short2 = short1 << 1;     // 4 left-shifted by 1 = 8
    bitset<16> bitset2{
   short2};
    cout << bitset2 << endl;  // 0b00000000'00001000

    unsigned short short3 = short1 << 2;     // 4 left-shifted by 2 = 16
    bitset<16> bitset3{
   short3};
    cout << bitset3 << endl;  // 0b00000000'00010000
}

如果你左移有符号的数字,以至于符号位受影响,则结果是不确定的。 下面的示例演示了将1位左移到符号位位置时所发生的情况。

#include <iostream>
#include <bitset>

using namespace std;

int main() {
   
    short short1 = 16384;
    bitset<16> bitset1(short1);
    cout << bitset1 << endl;  // 0b01000000'00000000

    
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值