sos の 作業メモ

プログラミングや英会話学習、マイルや旅行、日常生活など。最近はWebFormなASP.NETのお守りがお仕事です。

日々の生活にhappyをプラスする|ハピタス Gポイント

signed<->unsignedのキャスト

iOSのおかげで、久しぶりにみっちりとC言語に取り組んでいますが、 Javaな世界にどっぷり使っていたおかげで、符号の有無での変換のルールをすっかり忘れていました。

もちろんJavaでもunsignedな数字を意識することはありますが、あくまでbit操作してる時とかだけで、普段はそれほど注意していなかったように思いますので、あらためて調査してみました。

調査結果

結論からいうと2の補数忘れてんじゃないよ俺ってことで。

  • 同じ型ならそのまま。0xffffffffを 4294967295と解釈するか-1と解釈するかは、変数の型次第。
  • 型が違う場合は、元がsignedなら符号ビット、unsignedなら0を、変換後の型のbit数と同じになるまであたまに埋めて行く。その符号ビットをどう評価するかは、変換後の型次第。

ということになります。2の補数による負の表現ってほんと便利ですね。

CというかC++の知識もC++2003辺りで止まっているので、C++11を勉強して、iOSもOcjective-C++でコーディングできるようになりたい。プロのエンジニアの端くれとして、改めてやる気がわいてきました。