我有一个unsigned
,并希望将其转换为uint64_t
(如果可能,请返回)。
我该怎么做?如果可能的话,我想避免依赖未定义的行为。
谢谢!
答案 0 :(得分:5)
从任何整数类型转换为无符号整数类型完全由标准定义(第6.3.1.3节,第2段)。如果值可以在目标类型中表示,则保留该值,否则以模2^WIDTH
为模减少值,其中WIDTH
是目标类型的宽度(值位数)。
答案 1 :(得分:1)
例如:
const uint64_t bigvalue = (uint64_t) 42u;
不确定是否需要演员表,因为这不会丢失信息。相反:
const unsigned int smallvalue = (unsigned int) bigvalue;
需要演员,因为它(可能假设int
< uint64_t
是一种更窄的类型。
注意:我的意思是“需要”;由于在转换为更窄的类型时存在丢失信息的风险,编译器可能会发出警告。演员阵容增添了一种“我知道我在做什么”的感觉,这就是这种警告通常是如何沉默的。
答案 2 :(得分:0)
你可以通过类型转换来实现:
uint64_t new = (uint64_t) old;
old
是你的unsigned int。
答案 3 :(得分:-1)
因为你在C地,所以演员将是你唯一的方式。只需做
uint64_t foo = (uint64_t)myVar;
或者,反过来
unsigned int bar = (unsigned int)foo;
虽然在uint64_t
- >的情况下,您的编译器应自动获取转换。 unsigned int
,您应该收到关于截断的警告。此外,除非您在64位环境中进行编译,否则在转换回来时,该值当然会被截断。