C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

符号あり整数を符号なしにキャスト

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■90975 / inTopicNo.1)  符号あり整数を符号なしにキャスト
  
□投稿者/ so (1回)-(2019/05/15(Wed) 14:25:43)

分類:[C/C++] 

C++ (Visual C++ 2010 Express)を使って開発しています。

short型の変数を unsigned short型にキャストしたいのですが
以下のようなキャストを行っても大丈夫でしょうか?

unsigned short usA = (unsigned short)sB;

キャスト先に悪影響(ゴミデータが入るなど)があるかどうかを懸念しているのですが、
Webで調べてみても逆の変換の事例ばかりでわからなかったため、質問させていただきました。
引用返信 編集キー/
■90977 / inTopicNo.2)  Re[1]: 符号あり整数を符号なしにキャスト
□投稿者/ 774RR (686回)-(2019/05/15(Wed) 14:42:12)
Visual C++ ってことは CPU は x86 (x86-64) なので、符号あり数は2の補数システムだから
> unsigned short usA = (unsigned short)sB;
の挙動は
・値の内部表現のビットパターンが変化しない
・元の数が負数のとき、変換後は正の大きい値になる
であって、悪影響はないっす(悪影響の定義次第ですが)

-32768→32768
-2→65534
-1→65535
0→0
1→1
2→2
32767→32767
が意図通りなのならこれで OK

せっかく C++ なんだったら static_cast<unsigned short>(sB) とか。

# オイラんとこでは「型名接頭語」であるシステムハンガリアンは廃止したっす。

引用返信 編集キー/
■91014 / inTopicNo.3)  Re[2]: 符号あり整数を符号なしにキャスト
□投稿者/ so (2回)-(2019/05/17(Fri) 13:38:31)
No90977 (774RR さん) に返信

ありがとうございます。
正の整数しか使用しないので、悪影響ではないと判断しました。

#システムハンガリアンは、さすがに今は廃止しているところ多いみたいですね。
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ