//
num=101101;
~num;
res=11111111111111111111111111010010;
//k=1
num=101101;
num ^ k;
res=101100;
//k=11
num=101101;
num ^ k;
res=101110;
//k=111
num=101101;
num ^ k;
res=101010;
//k=1111
num=101101;
num ^ k;
res=100010;
//k=1010
num=101101;
num ^ k;
res=100111;
//k=3
num=0;
1 << (k - 1);
res=100;
//k=3
num=0;
~(1 << (k - 1));
res=11111111111111111111111111111011;
//去掉最后一位
num=101101;
num >> 1;
res=10110;
//在最后加一个0
num=101101;
num << 1;
res=1011010;
//在最后加一个1
num=101101;
(num << 1) + 1;
res=1011011;
//把最后一位变成1
num=101100;
num | 1;
res=101101;
//把最后一位变成0
num=101101;
(num | 1) - 1;
res=101100;
//最后一位取反
num=101101;
num ^ 1;
res=101100;
//把右数第k位变成1 k=2
num=101001;
num | (1 << (k - 1));
res=101011;
//把右数第k位变成1 k=3
num=101001;
num | (1 << (k - 1));
res=101101;
//把右数第k位变成1 k=4
num=101001;
num | (1 << (k - 1));
res=101001;
//把右数第k位变成0 k=3
num=101101;
num & (~ (1 << (k - 1)));
res=101001;
//右数第k位取反 k=3
num=101001;
num ^ (1 << (k - 1));
res=101101;
//取末三位 a=7
num=101101;
num & 111;
res=101;
//取末k位 k=5
num=1101101;
num & ((1 << k) - 1);
res=1101;
//k=5
num=1101101;
(1 << k);
res=100000;
//k=5
num=1101101;
(1 << k) - 1;
res=11111;
//取右数第k位 k=4
num=1101101;
num >> (k - 1) & 1;
res=1;
//把末k位变成1 k=4
num=101001;
num | ((1 << k) - 1);
res=101111;
//末k位取反 k=4
num=101001;
num ^ ((1 << k) - 1);
res=100110;
//把右边连续的1变成0
num=100101111;
num & (num + 1);
res=100100000;
//
num=100101111;
num + 1;
res=100110000;
//把右起第一个0变成1
num=100101111;
num | (num + 1);
res=100111111;
//把右边连续的0变成1
num=11011000;
num | (num - 1);
res=11011111;
//取右边连续的1
num=100101111;
(num ^ (num + 1)) >> 1;
res=1111;
//
num=100101111;
num ^ (num + 1);
res=11111;
//去掉右起第一个1的左边
num=100101000;
num & (num ^ (num - 1));
res=1000;
//
num=100101000;
num - 1;
res=100100111;
//
num=100101000;
num ^ (num - 1);
res=1111;
using System;
namespace ihaiu
{
public static class BitUtils
{
public static uint BitUnset(uint ui, int len , int bit){
uint mask = (uint)((1<<len+1)-1);
return ui & ~(mask<<bit) ;
}
public static uint BitSet(uint ui, int len, int bit, uint val){
uint mask = (uint)((1<<len+1)-1);
uint nv = mask & val;
return ui & ~(mask<<bit) | (nv<<bit);
}
public static uint BitGet(uint ui, int len, int bit){
uint mask = (uint)((1<<len+1)-1);
return ui & (mask << bit);
}
public static ulong BitUnset(ulong ui, int len , int bit){
ulong mask = (ulong)((1<<len+1)-1);
return ui & ~(mask<<bit) ;
}
public static ulong BitSet(ulong ui, int len, int bit, ulong val){
ulong mask = (ulong)((1<<len+1)-1);
ulong nv = mask & val;
return ui & ~(mask<<bit) | (nv<<bit);
}
public static ulong BitGet(ulong ui, int len, int bit){
ulong mask = (ulong)((1<<len+1)-1);
return ui & (mask << bit);
}
}
}