#define S64_MIN 如何在 linux 数据类型中定义?
How is #define S64_MIN defined in linux data types?
我试图理解在以下 else
条件中使用的 linux 宏 S64_MIN
的定义,即 draw = S64_MIN
.
S64_MIN
此处指的是哪个精确的十进制值?
if (weights[i])
{
u = hash(bucket->h.hash, x, ids[i], r);
u &= 0xffff;
ln = crush_ln(u) - 0x1000000000000ll;
__s64 draw = div64_s64(ln, weights[i]);
}
else
{
__s64 draw = S64_MIN;
// #define S64_MAX ((s64)(U64_MAX >> 1))
// #define S64_MIN ((s64)(-S64_MAX -1))
}
if (i == 0 || draw > high_draw)
{
high = i;
high_draw = draw;
}
}
return bucket->h.items[high];
}
您可以在Linux source code中查找这些宏定义:
#define U64_MAX ((u64)~0ULL)
#define S64_MAX ((s64)(U64_MAX >> 1))
#define S64_MIN ((s64)(-S64_MAX - 1))
这意味着:
U64_MAX
将所有位设置为 1。
- 然后
S64_MAX
将除最高位以外的所有位都设置为 1。
- 最后,
S64_MIN
将只设置最高位。
U64_MAX: 1111 1111 ... 1111 = 0xFFFF FFFF FFFF FFFF = 18,446,744,073,709,551,615
S64_MAX: 0111 1111 ... 1111 = 0x7FFF FFFF FFFF FFFF = 9,223,372,036,854,775,807
S64_MIN: 1000 0000 ... 0000 = 0x8000 0000 0000 0000 = -9,223,372,036,854,775,808
S64_MIN是64位有符号整数所能表示的最小值(最大负值)
# define S64_MAX 9223372036854775807LL
# define S64_MIN (-S64_MAX - 1LL)
我试图理解在以下 else
条件中使用的 linux 宏 S64_MIN
的定义,即 draw = S64_MIN
.
S64_MIN
此处指的是哪个精确的十进制值?
if (weights[i])
{
u = hash(bucket->h.hash, x, ids[i], r);
u &= 0xffff;
ln = crush_ln(u) - 0x1000000000000ll;
__s64 draw = div64_s64(ln, weights[i]);
}
else
{
__s64 draw = S64_MIN;
// #define S64_MAX ((s64)(U64_MAX >> 1))
// #define S64_MIN ((s64)(-S64_MAX -1))
}
if (i == 0 || draw > high_draw)
{
high = i;
high_draw = draw;
}
}
return bucket->h.items[high];
}
您可以在Linux source code中查找这些宏定义:
#define U64_MAX ((u64)~0ULL)
#define S64_MAX ((s64)(U64_MAX >> 1))
#define S64_MIN ((s64)(-S64_MAX - 1))
这意味着:
U64_MAX
将所有位设置为 1。- 然后
S64_MAX
将除最高位以外的所有位都设置为 1。 - 最后,
S64_MIN
将只设置最高位。
U64_MAX: 1111 1111 ... 1111 = 0xFFFF FFFF FFFF FFFF = 18,446,744,073,709,551,615
S64_MAX: 0111 1111 ... 1111 = 0x7FFF FFFF FFFF FFFF = 9,223,372,036,854,775,807
S64_MIN: 1000 0000 ... 0000 = 0x8000 0000 0000 0000 = -9,223,372,036,854,775,808
S64_MIN是64位有符号整数所能表示的最小值(最大负值)
# define S64_MAX 9223372036854775807LL
# define S64_MIN (-S64_MAX - 1LL)