我应该投不同的吗?
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
。
默认的 unsigned
和 long
是 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 int16
( long
).
我有这个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
。
默认的 unsigned
和 long
是 16 位的,这有点令人困惑。它也不支持unsigned int64
。
来自聊天:
read_adc()
function returns anunsigned 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 int16
( long
).