如何在C和C++中操作位

118 篇文章 62 订阅
36 篇文章 2 订阅

计算机中的所有数据均以二进制表示,即0或1。计算机不理解我们的语言,它们理解位。通常,程序员并不关心位级别的操作。但是有时程序员必须更深入地研究并研究比特。

 

位表示

在编程中,将n位整数存储

为由n位组成的二进制数。因此,一个32位整数由32位组成,而64位

整数由64位组成。在C ++编程语言中,int数据类型

为16位,32位和64位类型。

这是32位整数数字10的位表示形式:

0000000000000000000000000000101010

在C ++中, 

int

是带符号的无符号的,因此位表示形式是带符号的无符号的

在带符号的表示中,第一位表示数字的符号(0

表示正,1表示负),其余n-1位包含数字的

大小。

有符号和无符号表示之间存在联系。签名号码

-x

等于一个无符号数 

2^n – x

-x (signed) = 2^n - x (unsigned)

inta =-10;unsignedintb = a;std::cout<< a <<"\n";/* -10 */std::cout<< b <<"\n";/* 4294967286 */

在签名表示中,下一个数字 

2^(n – 1) – 1

 是 

-2^n – 1

,并且以无符号表示形式,是下一个数字 

如果你在学习C/C++的过程中遇到了问题,可以来加入小编的企鹅圈问小编哦~小编很热情的(●’◡’●)​​​​​​​

2^n – 1

 是 

0

位操作

我们可以使用&运算符检查数字是偶数还是奇数。

unsigned int的二进制表示形式

void binary(unsignedintnum){for(inti =256; i >0; i = i/2) {if(num & i)std::cout<<"1 ";elsestd::cout<<"0 ";}std::cout<

将位设置在位置

int set_bit(intnum,intposition){intmask =1<< position;returnnum | mask;}

获取位的位置

boolget_bit(intnum,intposition){boolbit = num & (1<< position);returnbit;}

在清零位置

int clear_bit(intnum,intposition){int mask =1<< position;returnnum & ~mask;}

代表集

 

整数的位表示为0索引,并且索引从右侧(即最低有效位)开始。这样我们就可以代表集合的每个子集

{0, 1, 2, ..., n-1}

作为n位整数,其位指示哪个元素属于该子集。如果在数字的二进制表示中索引3的位为1,索引4的位为0,则3属于该子集,而4不属于该子集。

对于32位整数,集合为{0,1,2,…,31},子集为{1、3、4、8}。该集合的二进制表示形式是:

00000000000000000000000100011010

,十进制表示形式是2 ^ 8 + 2 ^ 4 + 2 ^ 3 + 2 ^ 1 = 282。

代码形成子集并向其中添加元素:

int add_elements_to_subset(){intsubset =0;subset = subset | (1<<1);subset = subset | (1<<3);subset = subset | (1<<4);subset = subset | (1<<8);returnsubset;}

打印子集元素的代码:

void printing_subset(intsubset){for(inti =0; i <32; i++){if(subset & (1<< i))std::cout<< i <<" ";}}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值