#include <iostream>
using namespace std;
//得到x二进制第i位的值(二进制最右边为第0位,i从0开始)
int getBit(int x,int i)
{
return (x>>i)&1;
}
//将x二进制第i位的值为置为val(i从0开始)
void setBit(int &x,int i,int val)
{
if(val)
{
x |= (1<<i);
}
else
{
x &= ~(1<<i);
}
}
//翻转第i位(i从0开始)
void flipBit(int &x,int i)
{
x ^= (1<<i);
}
//用^交换x,y
void mySwap(int &x,int &y)
{
x = x ^ y;
y = x ^ y;
x = x ^ y;
}
/*
x y 交换值:
x = x ^ y; //1
y = x ^ y; //2
x = x ^ y; //3
原理:
^运算满足交换律,
相同两个数的异或值为0,
0与任何一个数异或结果为它本身
将1带入2:
y = x ^ y ^ y; // y = x
将1的结果y = x和2带入3:
x = x ^ y ^ x = x ^ x ^ y = y; // x = y
*/
int main()
{
int now = 13;
int tt = now;
string s;
while(tt)
{
char c = (tt&1) + 48;
s = c + s;
tt >>= 1;
}
cout<<s<<endl;
for(int i = 0; i < 4; i++)
{
cout<<i<<":"<<getBit(now,i)<<endl;
}
/*
int y = 0;
flipBit(y,2);
cout<<y<<endl;
flipBit(y,2);
for(int i = 1; i <= 10; i++)
{
setBit(y,i-1,1);
//cout<<y<<endl;
cout<<getBit(y,i-1)<<endl;
setBit(y,i-1,0);
cout<<getBit(y,i-1)<<endl;
}
*/
int x;
cin>>x;
int b[50];
int k = 0;
int t = x;
while(t)
{
b[k++] = t & 1;
t >>= 1;
}
/*
for(int i = k - 1; i >= 0; i--)
{
cout<<b[i];
}
cout<<endl;
*/
for(int i = 0,j = k - 1; i < j; i++,j--)
{
mySwap(b[i],b[j]);
}
//x的二进制
for(int i = 0; i < k; i++)
{
cout<<b[i];
}
cout<<endl;
//gitBit
for(int i = 0; i < k; i++)
{
cout<<getBit(x,i)<<endl;
}
return 0;
}
myBitSet
最新推荐文章于 2024-06-16 21:26:47 发布