如何将unsigned转换为uint64_t?

时间:2012-09-27 14:31:46

标签: c c99 unsigned

我有一个unsigned,并希望将其转换为uint64_t(如果可能,请返回)。

我该怎么做?如果可能的话,我想避免依赖未定义的行为。

谢谢!

4 个答案:

答案 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位环境中进行编译,否则在转换回来时,该值当然会被截断。