- PR -

C# の &、|=、

1
投稿者投稿内容
comeseesee
常連さん
会議室デビュー日: 2004/11/24
投稿数: 36
投稿日時: 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 ]
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2005-04-08 10:12
引用:

以下のC++ソースをC#に変換する方法を教えて頂きたいと思います。



該当部分についてC++の言語仕様とC#の言語仕様を理解すると変換できます。

というか、まずは自分がどう書き直してダメだったのかを提示しましょう。
_________________
一つ理解するたびに、一つあなたは楽になる。

[ メッセージ編集済み 編集者: NAL-6295 編集日時 2005-04-08 10:23 ]
comeseesee
常連さん
会議室デビュー日: 2004/11/24
投稿数: 36
投稿日時: 2005-04-08 10:32
MSDNで調べましたが、&演算子について、どんな型が使えないのか書いていないし、内容もよく理解できませんでした。
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 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/02/02
投稿数: 36
投稿日時: 2005-04-08 10:57
こんにちは。
これって、普通にC#の本やヘルプに載っているはずですが。
C++で記述されているところの、&、|、=、<<等の
それぞれの意味を理解してC#に直さなければ
結局行き詰ると思いますよ。

C++のコードが完璧で直す場所、仕様変更が全くないという
前提なら別ですが。。。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)