举例: int a; int b=2147483648; a = (a + b + b) % (b + b) - b; 但只限于long int short byte uint ulong等整数形
建议antoniusguo(anton)去参加辩论赛,不得不佩服~
// 这个是原来的字节,一共有8位 byte b = 0x0;// 现在把其中一位更改,比如要更改第3位为1 int c = 32; // 32就是00100000 b = (byte)(((int)b)|c); // 这里利用逻辑或运算|,来更改值为1// 现在把第三位更改回0 c = 223; // 223就是11011111 b = (byte)(((int)b)&c); // 这里利用逻辑与运算&,来更改值为0
楼主意思是取反。对某一位取反的话,写一个方法来做byte BitReverse(byte b, ushort position) { int c = 128; for (int i=1;i<position;i++) { c = c/2; } // 先把位数改为1,如果数值变化,则说明取反成功,如果数值没有变化,则改为0 byte temp = (byte)(((int)b)|c); if (temp.Equals(b)) { c = 255 - c; temp = (byte)(((int)b)&c); } return temp; }
如果只是要求前4位取反 byte ReverseHigh(byte b) { int d = (int)b; // 转化整数 int h = ~(d>>4); // 高位取反 b = (byte)((d&15) + (h<<4)); // d&15是将高位全部置0,然后将h变高位,加起来 return b; }
再写简单一些byte ReverseHigh(byte b) { int i = (int)b; // 直接高位取反,240就是11110000,这里会将低位全部置0,得到高位 // 15的二进制为00001111,d&15是将高位全部置0,取低位 b = (byte)((~i&240) + (i & 15)); return b; }
再string = convert.tostring(temp,2)l;
再string.replace();
再convert转换回去
b = (b << 4) | (bb >> 4);
?
b = b & 15;
低4位与,只能取低4位,高位得0,但楼主要求高位改变,如果是0,得1
int a;
int b=2147483648;
a = (a + b + b) % (b + b) - b;
但只限于long int short byte uint ulong等整数形
byte b = 0x0;// 现在把其中一位更改,比如要更改第3位为1
int c = 32; // 32就是00100000
b = (byte)(((int)b)|c); // 这里利用逻辑或运算|,来更改值为1// 现在把第三位更改回0
c = 223; // 223就是11011111
b = (byte)(((int)b)&c); // 这里利用逻辑与运算&,来更改值为0
{
int c = 128;
for (int i=1;i<position;i++)
{
c = c/2;
}
// 先把位数改为1,如果数值变化,则说明取反成功,如果数值没有变化,则改为0
byte temp = (byte)(((int)b)|c);
if (temp.Equals(b))
{
c = 255 - c;
temp = (byte)(((int)b)&c);
}
return temp;
}
byte ReverseHigh(byte b)
{
int d = (int)b; // 转化整数
int h = ~(d>>4); // 高位取反
b = (byte)((d&15) + (h<<4)); // d&15是将高位全部置0,然后将h变高位,加起来
return b;
}
不好意思啊。。我可能是我没说明白我的意思是 如果是 0 的话改为 1 反之如果是1的话那么改为 0楼主我前面回复你的是满足你的要求的
byte1 ^ 240
就是对byte1高4位取反,其中240二进制是11110000
也感谢 “viena() 维也纳(windows7) ” 您的意思很正确。。谢谢
{
int i = (int)b;
// 直接高位取反,240就是11110000,这里会将低位全部置0,得到高位
// 15的二进制为00001111,d&15是将高位全部置0,取低位
b = (byte)((~i&240) + (i & 15));
return b;
}