【发布时间】:2016-10-14 12:20:46
【问题描述】:
不知何故我得到了一个负值,我需要等效的正值。我虽然将 MAX + 1 添加到该值,其中 MAX 是可以用这么多位数表示的最大值,我们可以解决这个问题。但这并没有帮助。例如请看下面的代码:
#include <stdio.h>
int main()
{
long long int i;
unsigned long long u;
u = 0xffffffff38034080;
u = 0xffffffffffffffff + u + 1;
printf("0x%llx", u);
}
但是这个程序返回的是相同的负数。
程序的输出是:0xffffffff38034080。我希望它是0x0000000038034080
【问题讨论】:
-
0xffffffff38034080是一个正十六进制数。你期待什么? -
我要转换 0xffffffff38034080 -> 0x0000000038034080
-
您只是引发了溢出,然后您的数字完全相同。您可以乘以 -1 或将其与
~反转并加 1 我认为或使用位操作,如& -
@mch 已修复,您可以删除您的评论。谢谢
-
您正在使用一些不寻常的“等效”定义,您需要指定这些定义才能让这个问题得到回答。