String.format()
がそのように振る舞う理由を理解しようとしています。
コンテキスト:システムプログラミングクラス、アセンブラーの記述。
オブジェクトファイルには、値から作成している5文字の16進数フィールドがあります。
使用してみました:String.format("%05X", decInt);
これは、正の数(11-> 0000B
)ただし、負の数の場合は失敗します(-1 [-> FFFFFFFF
の代わりにFFFFF
)
最後の5文字の部分文字列だけを取得できると思いますが、なぜこのように動作するのかを理解したいと思います。
フォーマットで使用される幅は常に最小幅です。この場合、部分文字列操作を使用する代わりに、次のことをお勧めします。
String.format("%05X", decInt & 0xFFFFF);
フォーマット幅は最小桁数を作成するためにのみ機能し、先行ゼロにのみ効果があります。
部分文字列の代わりに、ビットマスクを使用できます。
String.format("%05X", decInt & 0x0FFFFF)
ところで、質問で主張されている11
ではなく、0000B
-> 0000A
です。