プロが教える店舗&オフィスのセキュリティ対策術

ビット反転(Not)が機能しない

VB2005 Framework2を使っています。
現在、テキストボックスに入力した16進数を2進数に変換後ビットを反転させた2進数を再びテキストボックスに表示するプログラムを作っているのですが2進数の反転が上手くいきません。

Convert.ToString関数で2進の変換までは上手くいったのですが、その後代入した変数にNot
で反転させて表示させると結果が合わないだけでなく、何故かマイナス表示になったりしてしまいます。



Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim X As String = TextBox1.Text
Dim Z As String = Convert.ToString(Convert.ToInt32(X, 16), 2)

TextBox1.Text = Not Z

End Sub


Notだけではビットを上手く反転させられないのでしょうか?

A 回答 (3件)

>Notだけではビットを上手く反転させられないのでしょうか?


符号を意識していない場合、
16進(2進)を10進に変換すると、先頭BITが'1'の場合はマイナスとなりますので、符号なしで変換しないとダメです

変数Zを一旦、UShortかUIntegerかULongに代入してからNOTすればいいと思います
    • good
    • 0
この回答へのお礼

有難うございます。
符号ありの型を使っていたことが問題でした。

お礼日時:2010/01/28 10:16

ToInt32を使う時点でNGです。


型が符号付です。

「unsigned long」や「unsigned int」という符号無しの型が、.NETでは利用できます。

http://www.atmarkit.co.jp/fdotnet/dotnettips/024 …




Dim X As String = TextBox1.Text

Dim Z As UInt32 = 0

If Not UInt32.TryParse(X, Z) Then
MsgBox("認識不可")
Exit Sub
End If

Dim Z_NOT As UInt32 = Not Z

TextBox1.Text = Z_NOT
    • good
    • 0

んー……なんでStringでビット反転させようと思ったんでしょうか。


やりたいのはこういう事じゃないかと思うんですが。

Dim Z as Long = Convert.ToInt32(X, 16)
TextBox1.Text = Convert.ToString(Not Z)

この回答への補足

回答ありがとうございます。
Stringでビット反転する意味は、16進(HEX)では10~15の表示はA~Fになるからです。
教えて頂いた方法では16進から10進に変換されてしまいますのでちょっと違います。

それからNOTが付くと結果が違う上にマイナスが付いてしまいますね・・

補足日時:2010/01/27 14:17
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!