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

わんくま同盟

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

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

ツリー一括表示

符号あり整数を符号なしにキャスト /so (19/05/15(Wed) 14:25) #90975
Re[1]: 符号あり整数を符号なしにキャスト /774RR (19/05/15(Wed) 14:42) #90977
  └ Re[2]: 符号あり整数を符号なしにキャスト /so (19/05/17(Fri) 13:38) #91014


親記事 / ▼[ 90977 ]
■90975 / 親階層)  符号あり整数を符号なしにキャスト
□投稿者/ 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で調べてみても逆の変換の事例ばかりでわからなかったため、質問させていただきました。
[ □ Tree ] 返信 編集キー/

▲[ 90975 ] / ▼[ 91014 ]
■90977 / 1階層)  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) とか。

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

[ 親 90975 / □ Tree ] 返信 編集キー/

▲[ 90977 ] / 返信無し
■91014 / 2階層)  Re[2]: 符号あり整数を符号なしにキャスト
□投稿者/ so (2回)-(2019/05/17(Fri) 13:38:31)
No90977 (774RR さん) に返信

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

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


管理者用

- Child Tree -