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

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

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

Re[5]: C# でビット反転の方法を教えて下さい


(過去ログ 112 を表示中)

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

■66151 / inTopicNo.1)  C# でビット反転の方法を教えて下さい
  
□投稿者/ ビビット (1回)-(2013/04/03(Wed) 20:21:40)

分類:[C#] 

お世話になります。

string s = "1001000101100";
とあるとき、下位1バイトを反転して1を加え、
結果的に16進数D4を得たいのですが、
どうにもやり方がわかりません。


以下、考え方だけですが(違っていたらご指摘ください)
・反転するのですから、0110111010011となる
・下位1バイトなので、11010011 が対象。
・これに1を加えると、11010100 となる。


「~」を使うのだとは思うのですが、
初心者なのでどう表現すればよいか分かりません。
ご教授いただけませんでしょうか?


何卒よろしくお願いいたします。
引用返信 編集キー/
■66152 / inTopicNo.2)  Re[1]: C# でビット反転の方法を教えて下さい
□投稿者/ howling (333回)-(2013/04/03(Wed) 20:39:48)
No66151 (ビビット さん) に返信
こんばんわ。

http://msdn.microsoft.com/ja-jp/library/d2bd4x66(v=vs.80).aspx

を見ればわかります。

が…多分そこらへんは、なんでそうなのか、っていうのくらいは知っておいた方がいいかと。
引用返信 編集キー/
■66153 / inTopicNo.3)  Re[1]: C# でビット反転の方法を教えて下さい
□投稿者/ shu (261回)-(2013/04/03(Wed) 22:03:34)
No66151 (ビビット さん) に返信

こんな感じですか。固定文字列を変換してもしょうがないのでTextBoxに入力した
内容を変換してます。エラーチェックはしてないので想定外の内容が入力されたら例外が発生します。

UInt32 a = Convert.ToUInt32(textBox1.Text,2);
UInt32 b = ((a & 0xFFFFFF00) | (~(a & 0xFF) & 0xFF)) + 1;
textBox2.Text = Convert.ToString(b, 2);

引用返信 編集キー/
■66158 / inTopicNo.4)  Re[2]: C# でビット反転の方法を教えて下さい
□投稿者/ ビビット (3回)-(2013/04/04(Thu) 11:42:17)
■howlingさん、shu さん

ありがとうございました!

> UInt32 b = ((a & 0xFFFFFF00) | (~(a & 0xFF) & 0xFF)) + 1;

ここら辺が今ひとつピンときてませんが、
基礎がないからと思います。

いただいたURLを参考にしてみます。
ありがとうございました。

解決済み
引用返信 編集キー/
■66159 / inTopicNo.5)  Re[3]: C# でビット反転の方法を教えて下さい
□投稿者/ howling (334回)-(2013/04/04(Thu) 15:54:51)
No66158 (ビビット さん) に返信

ここなんてどうでしょうか。

http://www.k4.dion.ne.jp/~type_f/keywords/hosuu.html

ちょっと話は逸れますが、この話ってそのURLにもある通り、基本情報技術者試験でよく出る内容です。
この試験、それなりにお金はかかるのですが、持っていて損はないのと、
確かに基礎的な知識は身に付くのでオススメしておきます。

私も数年前に取りました。
この試験、過去問をひたすらやっていれば受かるだけのことはできるのですが、
理解しながら、とやるとなかなかに骨が折れます。
が、かなり良い勉強になるかと。ご検討くださいな!
解決済み
引用返信 編集キー/
■66160 / inTopicNo.6)  Re[3]: C# でビット反転の方法を教えて下さい
□投稿者/ shu (264回)-(2013/04/04(Thu) 16:17:42)
No66158 (ビビット さん) に返信

No66151

> string s = "1001000101100";
> とあるとき、下位1バイトを反転して1を加え、
> 結果的に16進数D4を得たいのですが、
を見ると私の提示した処理だとD4にはならずかと言って結果以外の
過程には合っているような気がします。
D4を求めるには
下位1バイトを取り出して反転し1を加えるか
反転して1を加えてから下位1バイトを取り出す
必要があるかと思います。

実際にやりたいことに合わせ変更を加える必要がありそうです。
引用返信 編集キー/
■66179 / inTopicNo.7)  Re[4]: C# でビット反転の方法を教えて下さい
□投稿者/ ビビット (4回)-(2013/04/06(Sat) 22:09:59)
No66160 (shu さん) に返信
> ■No66158 (ビビット さん) に返信
>
> No66151
>
>>string s = "1001000101100";
>>とあるとき、下位1バイトを反転して1を加え、
>>結果的に16進数D4を得たいのですが、
> を見ると私の提示した処理だとD4にはならずかと言って結果以外の
> 過程には合っているような気がします。
> D4を求めるには
> 下位1バイトを取り出して反転し1を加えるか
> 反転して1を加えてから下位1バイトを取り出す
> 必要があるかと思います。
>
> 実際にやりたいことに合わせ変更を加える必要がありそうです。


ご返信ありがとうございます。
ちゃんとご教授頂いた方法でd4を得ることができていますよ。


>>string s = "1001000101100";
の下位1バイト
string s2 = "00101100";


ここで、教えていただいた


UInt32 a = Convert.ToUInt32(s2, 2);
UInt32 b = ((a & 0xFFFFFF00) | (~(a & 0xFF) & 0xFF)) + 1;
String result = Convert.ToString(b, 16);

最後だけ16進数にしています。

解決済み
引用返信 編集キー/
■66180 / inTopicNo.8)  Re[5]: C# でビット反転の方法を教えて下さい
□投稿者/ shu (267回)-(2013/04/06(Sat) 22:35:59)
No66179 (ビビット さん) に返信
> ご返信ありがとうございます。
> ちゃんとご教授頂いた方法でd4を得ることができていますよ。
>
>
> >>string s = "1001000101100";
> の下位1バイト
> string s2 = "00101100";
>
>
> ここで、教えていただいた
>
>
> UInt32 a = Convert.ToUInt32(s2, 2);
> UInt32 b = ((a & 0xFFFFFF00) | (~(a & 0xFF) & 0xFF)) + 1;
> String result = Convert.ToString(b, 16);
>
s2が下位1バイトを取り出す処理と同等のことを行っているので
そういうことであれば、
bの計算で
((a & 0xFFFFFF00) |
部分は不要で、sからs2を求める処理もいらないです。

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


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

このトピックに書きこむ

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

管理者用

- Child Tree -