程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。
一.移位运算(暂时还不知道这么做有何意义,先明白是怎样操作的吧)
https://blog.csdn.net/wangdamingll/article/details/53434098
1.1 >>
1.化十进制数为对应的二进制数,对应指格式对应
2.通通右移,正数左补0,负数左补1,右边丢弃
3.化为十进制数
例:
int a=8;a=a>>1;
1.a=0 000 0000 0000 1000
2.右移一位后:a= 0 000 0000 0000 100
3.补0:a=0 000 0000 0000 0100
4.化为十进制数:a=4
1.2 <<
将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。
若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。(按阶叠乘)
- 1001 0010 = 15
- 左移一位,15*2 = 30
- 左移两位,30*2 = 60
- 左移三位,60*2 = 120
二.按位与(或,异或,取反同理)
三.byte[] 和16进制字符串转换
public static String BytesToHex(byte[] bytes, int size = 0)
{
if (bytes == null || bytes.Length == 0)
{
return null;
}
if (size <= 0 || size > bytes.Length)
{
size = bytes.Length;
}
char[] buf = new char[2 * size];
for (int i = 0; i < size; i++)
{
byte b = bytes[i];
buf[2 * i + 1] = digits[b & 0xF];
b = (byte)(b >> 4);
buf[2 * i + 0] = digits[b & 0xF];
}
return new String(buf);
}
public static byte[] HexToBytes(String s)
{
int len = s.Length;
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2)
{
data[i / 2] = (byte)((CharToValue(s[i]) << 4) + (CharToValue(s[i + 1])));
}
return data;
}