我应该投不同的吗?

Should i cast different?

我有这个C代码(不适用于PC。是8位微控制器,CCS编译器)

long SirenVolt;//unsigned int16
long long DummyVolt;//unsigned int32

DummyVolt=read_adc();//Function always get values from 0 to 1024
SirenVolt=(long long)((493*DummyVolt)/100);

最后一行应该改成 long 吗? 我需要 SirenVolt 获得一个无符号 int16(长,根据 CCS 编译器)

Should i cast different?

是的,SirenVolt 是一个 long,你转换为 long long

默认的 unsignedlong 是 16 位的,这有点令人困惑。它也不支持unsigned int64

来自聊天:

read_adc() function returns an unsigned int16

因为它 returns 最大 1024,这应该有效:

long SirenVolt = (long) (read_adc() * 493LL / 100);

如果编译器不支持LL:

static const long long mul = 493;
static const long long div = 100;

long SirenVolt = (long) (read_adc() * mul / div);

read_adc() * mul 得到 long long,最大值 504832,除以 100 最大值 5048,非常适合 unsigned int16long).