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

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

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

Re[2]: 暗黙の型変換??


(過去ログ 36 を表示中)

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

■18374 / inTopicNo.1)  暗黙の型変換??
  
□投稿者/ SugaMori. (1回)-(2008/05/13(Tue) 21:02:17)

分類:[C#] 

いきなりですが本題に入ります。

Visual C# 2008 Express Editionを使って.Net Framework 2.0のアプリケーションを開発しています。

BinaryStreamから2バイト単位のビッグエンディアン(上位1バイトと下位1バイトを順序通り扱う)として読み込みたかったので、以下のような関数(メソッド)を作りました。

public static ushort BytesToUInt16(BinaryReader Reader)
{
    ushort Value;
    Value = (ushort)Reader.ReadByte();
    Value = (Value << 8) | (ushort)Reader.ReadByte(); // この行がエラーになります。
    return Value;
}

何の問題もないプログラムのつもりなのですが、『int型からushort型への暗黙の型変換がある』という旨のエラーになってしまいます。
ただ、どこをどうやってみても、私にはint型が発生するような演算を行っているようには見えないのです。
適当にushort型のキャストを追加すれば簡単にエラーは回避できるのですが、納得できません。
どこでint型が発生しているのでしょうか?

ちなみに、以下のようにキャストを追加してもエラーになりました。

public static ushort BytesToUInt16(BinaryReader Reader)
{
    ushort Value;
    Value = (ushort)Reader.ReadByte();
    Value = (ushort)(Value << 8) | (ushort)Reader.ReadByte(); // やっぱりダメです。
    return Value;
}

これがダメなので|演算子の結果がint型になっている感じはするのですが…。




引用返信 編集キー/
■18379 / inTopicNo.2)  Re[1]: 暗黙の型変換??
□投稿者/ Hongliang (271回)-(2008/05/13(Tue) 22:02:47)
Hongliang さんの Web サイト
http://msdn.microsoft.com/ja-jp/library/aa691377(VS.71).aspx
http://msdn.microsoft.com/ja-jp/library/aa691307(VS.71).aspx
シフト演算も論理演算も、int/uint/long/ulong にしか定義されていません。
ので、演算時には暗黙に int に変換されます。
引用返信 編集キー/
■18412 / inTopicNo.3)  Re[2]: 暗黙の型変換??
□投稿者/ SugaMori. (3回)-(2008/05/14(Wed) 09:47:35)
ありがとうございます。

MDSNのどこかに『整数型でビット演算が使える』みたいなことが書いてあったので、問題ないと思ってしまったのですが、そこで言う『整数型』はint/uint/long/ulongだけだったんですね。
なんでないのか不思議な感じもしますけど、仕方がないので乗算で対応するか、自力で演算子を作ることにします。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -