- - PR -
C# の &、|=、
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-04-08 10:10
こんにちは。
C++のソースがあって、それをC#に書き直したいですが、 以下の演算子の部分はよく理解できず、ためしにC#に書き直しましたが(para1、temp1とtemp2をbyteに設定)うまく行きません。(演算子 '&' を 'byte' と 'bool' 型のオペランドに適用することはできません。)と言われました。 以下のC++ソースをC#に変換する方法を教えて頂きたいと思います。 int i; unsigned char para1; char temp1,temp2; . . . if(para1 & 0x01) { ... } temp1 = ((para1 << 4) & 0xf0); temp1 |= ((para1 >> 4) & 0x0f); [ メッセージ編集済み 編集者: comeseesee 編集日時 2005-04-08 11:08 ] | ||||
|
投稿日時: 2005-04-08 10:12
該当部分についてC++の言語仕様とC#の言語仕様を理解すると変換できます。 というか、まずは自分がどう書き直してダメだったのかを提示しましょう。 _________________ 一つ理解するたびに、一つあなたは楽になる。 [ メッセージ編集済み 編集者: NAL-6295 編集日時 2005-04-08 10:23 ] | ||||
|
投稿日時: 2005-04-08 10:32
MSDNで調べましたが、&演算子について、どんな型が使えないのか書いていないし、内容もよく理解できませんでした。
| ||||
|
投稿日時: 2005-04-08 10:37
C# プログラマーズ リファレンス
& 演算子 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/csref/html/vclrfampersandoperator.asp に 二項 & 演算子は、整数型と bool に対してあらかじめ定義されています。 整数型の場合、& はオペランドのビットごとの AND を計算します。 bool オペランドの場合は、オペランドの論理 AND が計算されます。つまり、両方のオペランドが true の場合だけ結果が true になります。 とありますので、byteでは使えないということですね。 _________________ たつごろー codeseek こみゅぷらす | ||||
|
投稿日時: 2005-04-08 10:57
こんにちは。
これって、普通にC#の本やヘルプに載っているはずですが。 C++で記述されているところの、&、|、=、<<等の それぞれの意味を理解してC#に直さなければ 結局行き詰ると思いますよ。 C++のコードが完璧で直す場所、仕様変更が全くないという 前提なら別ですが。。。 | ||||
|
投稿日時: 2005-04-08 21:57
ん〜、危ない。単に置き換えているだけではまずいですよ。C++のソースが、何をしているか理解していますか?
> unsigned char para1; > if(para1 & 0x01) これは、para1の最下位ビットが1であれば真になります。 で、不安なのが次です。 > char temp1,temp2; > temp1 = ((para1 << 4) & 0xf0); > temp1 |= ((para1 >> 4) & 0x0f); para1はunsigned、符号無しなのに、temp1は暗黙のsigned、符号ありです。本当にきちんと動いていました? ここのコードは、para1の下位4ビットと上位4ビットを入れ替えています。この後、temp1をどのように扱っているのか不明ですが、符号あるなしで演算しているため、おそらく他の計算機とのデータやりとりをしていると思いますが、本当に期待した値が授受できていたのか、疑問です。 で、これだけのコードから想像するに、intやshortのバイト数が決めうちで定義されていると思います。その辺、きちんと調べておきましょうね。 単に「書き換える」だけでは済まないと思います。「書き直す」つもりでいましょう。。。 _________________ |
1