从二进制位到提取每个二进制位到C++中bitset使用

从二进制位到提取每个二进制位到C++中bitset使用

移位运算分为逻辑移位和算术移位。
逻辑移位:移出去的位就丢弃,空缺位用0填充;
算术移位:移出去的位丢弃,空缺位用“符号位来填充”,一般用在右移运算中。
对于有符号整数和无符号整数左移和右移运算是不同的。
(1)对于无符号整数,左移和右移运算都是逻辑移位。
(2)对于有符号整数,比如int类型:
左移是逻辑移位;右移是算术移位,即:按二进制形式把所有数字向右移动相应的位数,低位移出(舍弃),正数,高位的空位补0。负数,高位的空位补1.。
对有符号整型和无符号整型产生的效果:
(1)无符号左移n位
不溢出的情况下,相当于对此数乘以2的n次方
(2)无符号右移n位
不溢出的情况下,相当于对此数除以2的n次方
(3)有符号左移n位
在一定范围内相当于对此数乘以2的n次方,但是由于有符号整数第一位0代表正,1代表负,所以移位可能会改变符号位。
具体来说:
对于正数,符号位是0,则在右移的过程中,只要第一个1没有移动到首位,那么每一次就相当于在乘二。
对于负数,左移会将首位的1变成零,所以不符合除法规则。
(4)有符号右移n位
对于正数来说,在不溢出的情况下每一次右移都相当于对该数除以2,对于负数来说,移一位相当于除以2,不会出现溢出的情况。

了解清楚了移位规则,下面谈谈怎么提取一个正数的每一个二进制位

vector<int> getEveryBit(int num)
{
   
	int temp = 1;
	vector<int>count(32,0);
	for(int i=1;i<=32;++i)
	{
   	
		if(num&temp)
			count[i] = 1;
		temp<<= 1;
	}
	return count;
}

下面引入c++中bitset
C++的 bitset 在 bitset 头文件中,它是一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1bit空间。
构造函数
bitset常用构造函数有四种,如下

 bitset<4> bitset1;  //无参构造,长度为4,默认每一位为0

    bitset<8> bitset2(12);  //长度为8,二进制保存,前面用0补充

    string s = "100101";
    bitset<10> bitset3(s);  //长度为10,前面用0补充
    
    char s2[] = "10101"
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值