-Wshift-count-overflow 大数赋值警告处理
作者:互联网
先上参考链接:
c++ - shift count overflow when doing 1<<40 - Stack Overflow
描述基本与我编译出的警告一致,直接看解决方法:
只是这个是常数的,我的是这样子的:
ret = (data[7] | (data[6] << 8) | (data[5] << 16) | (data[4] << 24) | (data[3] << 32) | (data[2] << 40) | (data[1] << 48) | (data[0] << 56));
ret是一个unsigned long long int类型,这样执行赋值,结果没问题,但是会出标题的警告,根据上面的参考链接,这边稍作修改,如下,即解决:
ret = (data[7]) | ((u64)(data[6] << 8)) | ((data[5] << 16)) | ((data[4] << 24)) | ((u64)data[3] << 32) | ((u64)data[2] << 40) | ((u64)data[1] << 48) | ((u64)data[0] << 56);
原因大概猜的,有可能不对,希望有知道的来个正解,谢谢!
原因大概是这样:因为当一个unsigned char要偏移56位时,与偏移24位的不一样,编译器默认支持的扩展是unsigned int(u32),如果是要扩展临时值到unsigned long long int(u64)的话,需要自己指定,不然就会出warning。
所以只要在超32位的位移时,才去做u64强制扩展即可去掉warning。
标签:count,int,u64,unsigned,long,ret,overflow,Wshift,data 来源: https://blog.csdn.net/amwjatyvh/article/details/121953859