我有这段代码
#include <stdio.h>
typedef signed long long v2signed_long
__attribute__ ((__vector_size__ (sizeof(signed long long) * 2)));
int main()
{
v2signed_long v = {4611686018427387904LL, -9223372036854775808LL};
printf("%lli, %lli\n", v[0], v[1]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这给出了以下警告(相关问题没有帮助):
:7:45: warning: integer literal is too large to be represented in
a signed integer type, interpreting as unsigned
[-Wimplicitly-unsigned-literal]
v2signed_long v = {4611686018427387904LL, -9223372036854775808LL};
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个警告?谢谢!
dbu*_*ush 11
问题是它-9223372036854775808LL实际上不是整数文字。它是应用9223372036854775808LL了一元运算-符的文字。该值9223372036854775808太大而无法放入 asigned long long这就是您收到警告的原因。
您可以改用表达式-9223372036854775807LL - 1LL来解决此问题。该值9223372036854775807适合 a signed long longas does -9223372036854775807LL,然后减去 1 为您提供所需的值。
或者,您可以使用宏LLONG_MIN.
| 归档时间: |
|
| 查看次数: |
503 次 |
| 最近记录: |