c语言错位机密算法,c – VS编译警告:32位移位的结果隐式转换为64位

Visual Studio 2013在以下问题上发出令人烦恼(并且看似无关紧要)的编译警告:

#include

#define PRECISION 16

uint64_t hi = 0;

for (uint8_t i = 0; i < PRECISION; i++)

{

if (some_condition)

{

hi += 1 << (PRECISION - 1 - i);

}

}

这是编译警告:

warning C4334: '<

result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?)

当改变1<<<< (PRECISION-1-i)至1<< (PRECISION - 1). 所以我一直试图找出1<<<< (PRECISION - 1 - i). 显然,如果i> = = PRECISION,那么左移操作将产生未定义的行为. 但是,变量i不超过PRECISION – 1的值. 而且,即使我们假设编译器无法推断出这个事实,我也看不出这个编译警告与由于左移操作数引起的潜在的未定义行为有什么关系. 也许它假定PRECISION的无符号值 – 1 – i可以大于31. 但我究竟应该如何告诉编译器它从来没有呢? 我找到了one related question,但没有提供正确的答案.

谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值