开发者

Bitset program C++

开发者 https://www.devze.com 2023-02-07 18:09 出处:网络
I seem to be missing something silly here. int main() { /* bitset<sizeof(int)*8> bisetInt(64); cout<<\"Sizeof is \"<<sizeof(int)<<endl;

I seem to be missing something silly here.

int main() 
{ 
        /* 
        bitset<sizeof(int)*8> bisetInt(64); 
        cout<<"Sizeof is "<<sizeof(int)<<endl; 

        for(int i=0;i< sizeof(int)*8;i++) 
                cout<<bisetInt[i]<<endl; 
        //cout<<"no bits set are "<<bisetInt.count()<<endl; 
        */ 

        int num = 5; 
        int x = 1; 


        for (int i = 0;i < 5; i++) 
        {        
                x = x<<i; 
                cout<< (num & x)<<e开发者_开发技巧ndl; 
                cout<<"value of  x is "<<x<<endl; 
        } 

        return 0; 
} 

Outputs :

1
value of  x is 1
0
value of  x is 2
0
value of  x is 8
0
value of  x is 64
0
value of  x is 1024

For a moment i thought it was

x = x<<i; //not this
x<<i;//rather this

That just does not change the value of x at all. I am not sure why x is jumping from 2->8->64

Cheers!


You are shifting by i bits every time around the loop.

The first time you shift by 0, keeping the 1. Then you shift by 1, which makes the 1 into a 2. This is then shifted by 2 bits, making it into 8, and so on. Maybe you meant

x = 1 << i;

which would print the value of an integer with successively larger single bits set (1, 2, 4, 8, ...).

0

精彩评论

暂无评论...
验证码 换一张
取 消