Skip to main content

关于 0x3f3f3f3f 与 memset(a, 0x3f, sizeof a)

· 2 min read
therainisme

在算法题中,一般无穷大常量取值可以是 0x3f3f3f3f。

0x3f3f3f3f

0x3f3f3f3f 的十进制是 1061109567,它是 10^9 级别的数。

它大于 10^9。一般场合下数据都是小于 10^9 的。所以如果数据范围在 -10^9 ~ 10^9 之间,可以使用这个常量。

如果 0x3f3f3f + 0x3f3f3f3f = 0x7e7e7e7e(2122219134),结果非常大但却没有超过 32bit int 的表示范围,所以0x3f3f3f3f 还满足了“无穷大加无穷大还是无穷大”的需求。

可以使用 memset(a, 0x3f, sizeof a) 将数组中所有数置为 0x3f3f3f3f。

memset(a, 0x3f, sizeof a)

memset 函数是内存赋值函数,用来给某一块内存空间进行赋值。

memset 按字节赋值。

在 C++ 中一个 int 是 4 字节,如果 i 是 int 变量的地址,memset(i, 0x3f, sizeof i) 意味着给 i 变量的内存空间赋值为 0x3f3f3f3f。

所以说将一个数组全部置为 0x3f3f3f3f 可以使用 memset(a, 0x3f, sizeof a)

相似的,因为 -1 的二进制表示 1111... 32 个 1 组成,所以可以使用 memset(a, -1, sizeof a) 将数组全部置为 -1。

相似的还有 memset(a, 0, sizeof a) 将数组全部置为 0。