永遠ǒ縝嗳
幼苗
共回答了26个问题采纳率:92.3% 举报
C++ 变量超出范围截断当给16位的unsigned short 对象赋值100000,赋的值是什么?
C++ primer参考答案是:
100000超过了16位的unsigned short类型的表示范围,编译器对其二进制表示截取低16位,相当于对65536求余(求模,%),得34464.
可能很多人不明白为什么要与65536求余,事实上:我们要取的是低十六位二进制数,超过的高进位部分全部去掉,而17位以上(包括17位)都将去掉,而17位二进制数是1 0000 0000 0000=65536
如果这个赋值数转化为二进制不是恰好17位而是18位19位...同样可以这样求余运算,原因是:高于17位都是65536的倍数(0倍或2倍),二进制是把每位的数加起来成为十进制,这样求模加法法则可知
最后高于十六位的与65536求余得到的都为0,剩下的不就是低十六位了.
1年前
1