myBitSet
#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; //1y = x ^ y; //2x = 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;//gitBitfor(int i = 0; i < k; i++){cout<<getBit(x,i)<<endl;}return 0;
}
總結
- 上一篇: P1582 倒水(二进制)
- 下一篇: P1313 计算系数(组合数)