首先我们明确一点 二进制和十进制 十六进制只是给人看的, 电脑里都是二进制,代码里对int 进制 移位和运算与 都是操作的二进制数
代码如下
返回的结果是 十进制的 0 1 2 3 4…代表第几位(从右往左)发生了改变
private List<int> GetNewData(uint oldData, uint newData)
{
if (oldData == newData) return null;
List<int> result = new List<int>();
for (int i = 0; i < 24; i++)
{
uint v = (oldData >> i); //移位操作,左移1位相当于乘2 右移1位相当于除2 对于二进制的意义在于将数整体左移右移,超出的部分会被丢弃
//其实对于这里来说,因为和1按位与,结果只看最后一位是否都是1,结果要么0 要么是1,右移是为了把高位放到低位上,所以如果发生了变化,对应的位新旧值肯定不同
v = v & 0x00000001; //按位与, 两个整数按二进制,两位都是1时结果是1, 如1和3 二进制是 001 011, 1&3 = 001 结果是·1
uint v2 = (newData >> i);
v2 = v2 & 0x00000001;
if (v != v2)
{
result.Add((byte)i); //这里直接用i和转为byte是一样的
// result.Add(i);
}
}
return result;
}