- ベストアンサー
ビット反転(Not)が機能しない
- VB2005 Framework2を使っています。現在、テキストボックスに入力した16進数を2進数に変換後ビットを反転させた2進数を再びテキストボックスに表示するプログラムを作っているのですが2進数の反転が上手くいきません。
- Convert.ToString関数で2進の変換までは上手くいったのですが、その後代入した変数にNotで反転させて表示させると結果が合わないだけでなく、何故かマイナス表示になったりしてしまいます。
- Notだけではビットを上手く反転させられないのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>Notだけではビットを上手く反転させられないのでしょうか? 符号を意識していない場合、 16進(2進)を10進に変換すると、先頭BITが'1'の場合はマイナスとなりますので、符号なしで変換しないとダメです 変数Zを一旦、UShortかUIntegerかULongに代入してからNOTすればいいと思います
その他の回答 (2)
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
ToInt32を使う時点でNGです。 型が符号付です。 「unsigned long」や「unsigned int」という符号無しの型が、.NETでは利用できます。 http://www.atmarkit.co.jp/fdotnet/dotnettips/024w32api/w32api.html 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
- D-Matsu
- ベストアンサー率45% (1080/2394)
んー……なんで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が付くと結果が違う上にマイナスが付いてしまいますね・・
お礼
有難うございます。 符号ありの型を使っていたことが問題でした。