左移与右移运算符

本文详细介绍了位运算中的左移(<<)与右移(>>)运算符的功能与使用方法。左移运算符将二进制位向左移动指定位数,高位丢弃,低位补0,等效于乘以2的n次方;右移运算符将二进制位向右移动指定位数,等效于除以2的n次方。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

左移( << )与右移( >> )运算符

左移运算符“<<”是双目运算符。

左移n位就是乘以2的n次方。

其功能把”<<”左边的运算数的各二进位全部左移若干位,由”<<”右边的数指定移动的位数,高位丢
弃,低位补0。

右移运算符“>>”是双目运算符。

右移n位就是除以2的n次方。

其功能是把”>>”左边的运算数的各二进位全部右移若干位,”>>”右边的数指定移动的位数。


以上内容参考自菜鸟教程

### C++ 中左移右移运算符的用法及区别 在 C++ 中,左移运算符 (`<<`) 和右移运算符 (`>>`) 是位运算符的一部分,同时它们也被用于输入输出流操作。以下是它们的详细用法、示例以及区别。 #### 1. 左移运算符 (`<<`) 左移运算符的主要功能是将二进制的位向左移指定位数位溢出的部分会被丢弃,低位补零[^2]。此外,`<<` 运算符还被重载用于输出操作,例如 `cout << "Hello" << endl;`。 - **位运算**: 假设有一个整 `x` 和一个位移量 `n`,则 `x << n` 的结果是将 `x` 的二进制表示向左移动 `n` 位,并在低位补零。 ```cpp int x = 1; // 二进制为 0001 int result = x << 2; // 结果为 0100,即十进制的 4 ``` - **流输出**: 在 C++ 中,`<<` 被重载用于输出流对象(如 `std::cout`),以实现据的格式化输出[^4]。 ```cpp #include <iostream> using namespace std; int main() { int num = 42; cout << "The number is: " << num << endl; // 输出 The number is: 42 return 0; } ``` #### 2. 右移运算符 (`>>`) 右移运算符的功能是将二进制的位向右移指定位数,低位直接丢弃,位根据符号位填充[^2]。此外,`>>` 运算符也被重载用于输入操作,例如 `cin >> num;`。 - **位运算**: 假设有一个整 `x` 和一个位移量 `n`,则 `x >> n` 的结果是将 `x` 的二进制表示向右移动 `n` 位,并在位根据符号位填充(对于无符号则补零)。 ```cpp int x = 8; // 二进制为 00001000 int result = x >> 2; // 结果为 00000010,即十进制的 2 ``` - **流输入**: 在 C++ 中,`>>` 被重载用于输入流对象(如 `std::cin`),以实现从标准输入读取据[^4]。 ```cpp #include <iostream> using namespace std; int main() { int num; cout << "Enter a number: "; cin >> num; // 从标准输入读取一个整 cout << "You entered: " << num << endl; return 0; } ``` #### 3. 区别 - **功能不同**: - 左移运算符主要用于将二进制左移动并补零,同时也用于输出流操作。 - 右移运算符主要用于将二进制右移动并根据符号位填充,同时也用于输入流操作[^2]。 - **符号位处理**: - 左移时,低位始终补零。 - 右移时,无符号位补零,有符号位根据符号位填充(保持正负号不变)。 - **重载用途**: - 左移运算符通常用于输出操作,例如 `std::cout << value;`。 - 右移运算符通常用于输入操作,例如 `std::cin >> value;`。 #### 示例代码 以下是一个综合示例,展示左移右移运算符的用法: ```cpp #include <iostream> using namespace std; class Person { friend ostream& operator<<(ostream& os, const Person& p); friend istream& operator>>(istream& is, Person& p); private: string name; int age; }; // 重载 << 运算符 ostream& operator<<(ostream& os, const Person& p) { os << "Name: " << p.name << ", Age: " << p.age; return os; } // 重载 >> 运算符 istream& operator>>(istream& is, Person& p) { cout << "Enter name: "; is >> p.name; cout << "Enter age: "; is >> p.age; return is; } int main() { int x = 16; // 二进制为 00010000 cout << "Left shift: " << (x << 2) << endl; // 输出 64 cout << "Right shift: " << (x >> 2) << endl; // 输出 4 Person p; cin >> p; // 输入对象属性 cout << p; // 输出对象属性 return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值