• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ビット反転(Not)が機能しない )

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

このQ&Aのポイント
  • VB2005 Framework2を使っています。現在、テキストボックスに入力した16進数を2進数に変換後ビットを反転させた2進数を再びテキストボックスに表示するプログラムを作っているのですが2進数の反転が上手くいきません。
  • Convert.ToString関数で2進の変換までは上手くいったのですが、その後代入した変数にNotで反転させて表示させると結果が合わないだけでなく、何故かマイナス表示になったりしてしまいます。
  • Notだけではビットを上手く反転させられないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • nagare
  • ベストアンサー率33% (280/831)
回答No.2

>Notだけではビットを上手く反転させられないのでしょうか? 符号を意識していない場合、 16進(2進)を10進に変換すると、先頭BITが'1'の場合はマイナスとなりますので、符号なしで変換しないとダメです 変数Zを一旦、UShortかUIntegerかULongに代入してからNOTすればいいと思います

heaven123
質問者

お礼

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

その他の回答 (2)

回答No.3

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)
回答No.1

んー……なんでStringでビット反転させようと思ったんでしょうか。 やりたいのはこういう事じゃないかと思うんですが。 Dim Z as Long = Convert.ToInt32(X, 16) TextBox1.Text = Convert.ToString(Not Z)

heaven123
質問者

補足

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