估算机中的一切数据均以二进制表明,即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::couta"\n";/*-10*/std::coutb"\n";/*4294967286*/
在签名表明中,下一个数字
2^(n–1)–1
是
-2^n–1
,而且以无符号表明方式,是下一个数字
2^n–1
是
0
。
位操作
咱们能够运用&运算符查看数字是偶数仍是奇数。
unsignedint的二进制表明方式:
voidbinary(unsignedintnum){for(inti=256;i0;i=i/2){if(numi)std::cout"1";elsestd::cout"0";}std::cout
将位设置在方位:
intset_bit(intnum,intposition){intmask=1position;returnnum|mask;}
获取位的方位:
boolget_bit(intnum,intposition){boolbit=num(1position);returnbit;}
在清零方位:
intclear_bit(intnum,intposition){intmask=1position;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。
代码构成子集并向其间增加元素:
intadd_elements_to_subset(){intsubset=0;subset=subset|(11);subset=subset|(13);subset=subset|(14);subset=subset|(18);returnsubset;}
打印子集元素的代码:
voidprinting_subset(intsubset){for(inti=0;i32;i++){if(subset(1i))std::couti"";}}
添加新评论