c++ 左移/右移运算符总结

c++ 左移/右移运算符总结

逻辑移位和算数移位

  • 明确两种概念(逻辑移位和算数移位)
  • 逻辑移位和算数移位有区别,仅针对于有符号整数的左移/右移运算,对于无符号整数,没有这两者运算之间的差距

无符号整数

  • 采用逻辑移位,无论左移右移都用“0”填充

有符号整数

  • 逻辑移位即为有符号整数进行左移运算,高位舍掉,低位进行补“0”
  • 算数移位即为有符号整数进行右移运算,低位舍掉,高位补“符号位”

常数

  • 对于常数,只要左移超过31位,就是0

在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;

template<class T>
void printf_2(T& x) {
	cout << x << "的二进制:" << bitset<1 * 8>(x) << endl; // sizeof(x)
}

int main() {
	unsigned short a = 0110;
	int b = 0110;
	int c = -0110;
	printf_2(a);
	a = a << 4; // 左移 逻辑移位
	printf_2(a);

	printf_2(b);
	printf_2(c);
	c = c >> 3; // 右移 算术移位

	// 算术移位,空出的部分用符号位填补
	// 逻辑移位 则用0填补

	printf_2(c);
	//cout << bitset<sizeof(b)>  << endl;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值