關於 0x3f3f3f3f 的問題

2021-08-25 02:30:01 字數 337 閱讀 6171

0x3f3f3f3f是乙個很有用的數值,它是滿足以下兩個條件的最大整數。

1、整數的兩倍不超過 0x7f7f7f7f,即int能表示的最大正整數。

2、整數的每8位(每個位元組)都是相同的。

我們在程式設計中經常需要使用 memset(a, val, sizeof a) 初始化乙個陣列a,該語句把數值 val(0x00~0xff)填充到陣列a 的每個位元組上,所以用memset只能賦值出「每8位都相同」的 int。

當需要把乙個陣列中的數值初始化成正無窮時,為了避免加法算術上溢出或者繁瑣的判斷,我們經常用 memset(a, 0x3f, sizeof(a)) 給陣列賦 0x3f3f3f3f的值來代替。

0x3f3f3f3f(無窮大數)

一般定義無窮大數都是inf 99999999,或者0x7f ff ff ff,但是有的時候inf過大,雖然保證了沒有數超過它,但是在需要加上乙個數的時候,inf a可能會導致溢位,最終變成乙個負數。而0x3f3f3f3f的數量級也1e9的,一般題不會給超過1e9的數 在把它當成無窮大的時候,兩個0x...

為何INF設定為0x3f3f3f3f?

在演算法競賽中,我們常常需要用到乙個 無窮大 的值,對於我來說,大多數時間我會根據具體問題取乙個99999999之類的數 顯得很不專業啊!在網上看別人 的時候,經常會看到他們把inf設為0x7fffffff,奇怪為什麼設乙個這麼奇怪的十六進製制數,一查才知道,因為這是32 bit int的最大值。如...

關於最大值的設定0x3f3f3f3f

在演算法競賽中,我們常常需要用到乙個 無窮大 的值,對於我來說,大多數時間我會根據具體問題取乙個99999999之類的數 顯得很不專業啊!在網上看別人 的時候,經常會看到他們把inf設為0x7fffffff,奇怪為什麼設乙個這麼奇怪的十六進製制數,一查才知道,因為這是32 bit int的最大值。如...