[タイトル]
整数を指定して、この数値を16進数に変換するアルゴリズムを記述します。負の整数の場合、通常は1の補数演算を使用します。
[注]
16進法のすべての文字(af)は小文字でなければなりません。
16進文字列に余分な先行ゼロを含めることはできません。変換される数値が0の場合、単一の文字「0」で表されます。それ以外の場合、16進文字列の最初の文字は0文字ではありません。
指定された数値は、32ビットの符号付き整数の範囲内にあることが保証されています。
ライブラリが提供するメソッドを使用して、数値を16進数に直接変換またはフォーマットすることはできません。
[例1]
入力:
26
出力:
"1a"
[例2]
入力:
-1
出力:
"ffffffff"
[知識ポイント]ステップ
1:まず、補数が何であるかを知る必要があり
ます。正の数は元のコードです。逆数コード、および補数これらはすべてそれ自体
です。元のコード、1の補数、および負の数の補数は特別です。次の分析を参照してください。
例として32ビットの数を取り上げます。-
1
原码:1000 0000 0000 0000 0000 0000 0000 0001
反码:1111 1111 1111 1111 1111 1111 1111 1110
补码:1111 1111 1111 1111 1111 1111 1111 1111
左側の最初のものは符号ビット、1は負の数を表し、負の数の逆コードは、符号ビットを除いて数0を1に、1を0に変更する反転状態です。負の数の補数は、1の補数+1
[負の数]補数+ 1 = [負の数]の補数
step2:したがって、入力される可能性のある負の数numを処理してから、16進数に変換する必要があります。
まず、負の数-> 2進法->補数コード->補数コード-> 16進法、コードの次の部分は、負の数numを2進法に変換し、次に補数コード]、次にコードを補うことです。 10進数に変換するプロセス。ここでは、逆コードから16進数に直接変換したのではなく、10進数に変換してから、16進数に変換したことに注意してください。コードを再利用するために、次の数値は、数値が正の場合のコードです。 。
if num<0:
temp=bin(num)[3:]
s=list("{0:1>32}".format(temp))
i=31
for i in range(31,31-len(temp),-1):
s[i]='0' if s[i]=='1' else '1'
num=int("".join(s),2)+1
[コード]
[Python]
class Solution:
def toHex(self, num: int) -> str:
oct_hex={
0:"0",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"a",11:"b",12:"c",13:"d",14:"e",15:"f"}
ans=""
if num<0:
temp=bin(num)[3:]
s=list("{0:1>32}".format(temp))
i=31
for i in range(31,31-len(temp),-1):
if s[i]=='1':
s[i]='0'
else:
s[i]='1'
num=int("".join(s),2)+1
if num>0:
while num:
ans=oct_hex[num%16]+ans
num//=16
else:
return "0"
return ans
【簡潔版】
class Solution:
def toHex(self, num: int) -> str:
oct_hex="0123456789abcdef"
ans=""
if num<0:
temp=bin(num)[3:]
s=list("{0:1>32}".format(temp))
i=31
for i in range(31,31-len(temp),-1):
s[i]='0' if s[i]=='1' else '1'
num=int("".join(s),2)+1
if num>0:
while num:
ans=oct_hex[num%16]+ans
num//=16
else:
return "0"
return ans
【方法3】
class Solution:
def toHex(self, num: int) -> str:
if num == 0:
return "0"
oct_hex = "0123456789abcdef"
ans = ""
while num and len(ans) < 8:
ans = oct_hex[num & 0xf] + ans
num >>= 4
return ans