30分 |
因为执行了左移位,相当于乘法,进位了,int型很可能会放不下,所以默认给你变成long型,你不想保留高位(溢出的部分)再自己强制转换
否则默认给你按int型截断,你想保留高位,信息已经丢失,找不回来了 |
10分 |
我猜的啊。。。
0xff000000这个是16进制,每一位对应二进制4位ff000000就是8个1,24个0总共32位 (a&0xff000000)<<24再左移24位就有56位有效位了超过了int的4个字节,自动变成了long型 C#的跨类型计算是网精度高的隐性转换char->int->long->double->string,所以逻辑或运算的结果取long型 |
你不想保留高位(溢出的部分)再自己强制转换
否则默认给你按int型截断,你想保留高位,信息已经丢失,找不回来了 二楼的这部分怎么理解? 假如按我上面写的强制转成int会丢失信息吗?(假如在变成long类型后的值,并没有超过Int的最大值) |
|
如果没有超过int的最大值,只不过是丢失了一堆0而已 |