0x3f3f3f3fはどういう意味ですか? ? ?



What Does 0x3f3f3f3f Mean



私が最近問題解決の解決策を行っていたとき、私は大きな問題のレポートにしばしばそのような行があることに気づきました: ↓↓

const int inf = 0x3f3f3f3f

次に、調査に行きました。0x3f3f3f3fの小数は1061109567、つまり10 ^ 9レベルであり、一般的な場合のデータは10 ^ 9未満なので、データを無限大より大きくすることなく無限大として使用できます。



一般に、dfsまたはdpの問題の途中で、存在しない問題がいくつか発生します。私は通常、メソッドを使用して大きな値を返すので、最小値に達するとこれを取得できません。それは専門的な慣習ですか)、私はこの「非常に大きな値」を取るときに一般的に不可能な値を選択します。たとえば、最短パスを見つけるためのbfsは10000層のツリーであり、10005を取ります。

マクロは、考慮される時間を短縮するために0x3f3f3f3fを定義し、一般に、無限の数として使用できます。



他の誰かのブログから説明を引用してください:

0x3f3f3f3fは有用な値であり、次の2つの条件を満たす最大の整数です。

1、2倍の整数は0x7f7f7f7f、つまりintが表すことができる最大の正の整数を超えません。



2.整数の8ビットごと(各バイト)は同じです。

プログラム設計で配列aを初期化するには、memset(a、val、sizeof a)を使用する必要があることがよくあります。このステートメントは、値val(0x00〜0xFF)を配列aの各バイトに入力するため、memsetでのみ割り当てることができます。 「8ビットごとの整数は同じです」。

配列の値を正の無限大に初期化する必要がある場合、加算的な算術オーバーフローや面倒な判断を避けるために、memset(a、0x3f、sizeof(a))を使用して、代わりに0x3f3f3f3fの値を配列に割り当てることがよくあります。 。

これを参照することもできます: https://blog.csdn.net/jiange_zh/article/details/50198097