【发布时间】:2014-03-10 12:51:47
【问题描述】:
如何获取int 的long 值?比如如何得到-127的long值?
【问题讨论】:
-
请扩大问题。您可以将 int 分配给 long。所以从表面上看,你的要求是微不足道的。
-
可能问题不清楚,但你不能简单地进行类型转换吗?
标签: c++ int long-integer
如何获取int 的long 值?比如如何得到-127的long值?
【问题讨论】:
标签: c++ int long-integer
如果您正在讨论具有前导 1 的负数的位表示,那么您可以使用:
int intValue = -127;
long longValue;
if((0x80 << (sizeof(int)-1)) & intValue)
{
longValue = (0x80 << ((sizeof(long)-1)*8)) | ((0x80 << ((sizeof(int)-1)*8)) ^ intValue);
}else{
longValue = intValue
}
我希望我没有弄乱括号。
【讨论】:
signed int 到signed long 的简单赋值。其次,sizeof(int) 返回字节大小。在 int 中将 0x80 向左移动多个字节是错误的,因为您需要的是多个位,而不是字节。
*8,而在于根本不需要任何代码。我建议您删除答案,因为它非常具有误导性,不了解的新手会完全糊涂。
if 语句应替换为longValue = intValue。它给出了正确的位表示。你做的事情和赋值完全相同,只是你没有测试你的版本,一个足够聪明的编译器会将它降低为符号扩展无论如何。您的答案很可能被接受,因为提问者不知道更好。如果您不想使用长变量,只需编写一个函数即可。在那里,没有明确的变量,生活很好:)
int foo = -127;
long bar = foo;
assert(bar == foo); // We simply state that the values are the same
或者:
// Decent compilers will optimize this away in release build.
long long_from_int(int x) { return x; }
int foo = -127;
assert(long_from_int(foo) == -127L);
就是这样。生活没有比这更容易的了:)
【讨论】:
使用:Long.valueOf(int)
或者,如果你有一个“整数”,你也可以这样做:
整数 x = - 127; long y = x.longValue();
【讨论】: