int a = 12;
if (!BitConverter.IsLittleEndian)
{
a = (int)(((a & 0xff) >> 24) | ((a & 0xff00) >> 8) |((a&0xff0000)<<8) |((a&0xff000000)<<24));
}
Console.WriteLine(a);
Console.Read();
在这里做完移位之后,发现右边移位操作的结果会变成 long类型的变量,为什么会变成long类型而不是原来的int类型呢
------解决思路----------------------
因为执行了左移位,相当于乘法,进位了,int型很可能会放不下,所以默认给你变成long型,你不想保留高位(溢出的部分)再自己强制转换
否则默认给你按int型截断,你想保留高位,信息已经丢失,找不回来了
------解决思路----------------------
我猜的啊。。。
0xff000000这个是16进制,每一位对应二进制4位ff000000就是8个1,24个0总共32位
(a&0xff000000)<<24再左移24位就有56位有效位了超过了int的4个字节,自动变成了long型
C#的跨类型计算是网精度高的隐性转换char->int->long->double->string,所以逻辑或运算的结果取long型