No.3ベストアンサー
- 回答日時:
基本的には、左側のビットから順にそのビットが1か0かを見ていきます。
1であれば文字列の1、0であれば文字列の0を生成します。VB6には符号無し16ビット整数、ビットのシフト演算子が存在しません。従ってそれなりの工夫が必要となります
また&HFFFFは-1となりますので数値の65535を使用します。(&H8000も同様)
以下のような関数を作成してください。
関数の入力値は、符号つきの10進数
関数の戻り値は、ビットイメージの16桁の文字列となります。(4桁毎の空白の区切りはいれていません)
----------------------------------------------
Private Function dec2bit(decNum0 As Integer) As String
Dim i As Integer
Dim ret As Long
Dim decNum As Long
'integer(符号付き16ビット整数)を符号無しの16ビットとして扱う為に以下の操作をする
'符号無し16ビット整数はVB6には存在しない為、long型(符号付き32ビット整数)を使用する
If decNum0 >= 0 Then
'正、0はそのままセット
decNum = decNum0
Else
'負のときは、そのビットイメージをセット(例-1なら65535)
decNum = 65536 + decNum0
End If
dec2bit = ""
'文字列を作成
For i = 1 To 16
'最上位ビット(最も左側のビット)が1か0か判定
ret = decNum And 32768 '32768は符号無しの&H8000に相当する
If ret <> 0 Then
dec2bit = dec2bit & "1"
Else
dec2bit = dec2bit & "0"
End If
'左へ1ビットシフトする
'VB6はシフト演算子がないので、2倍する
decNum = decNum * 2
'オーバーフロー防止の為、符号無しの&FFFFでマスクする
If decNum >= 65536 Then
decNum = decNum - 65536
End If
Next
End Function
No.2
- 回答日時:
1.言語はVB6でしょうか。
VB.NETでしょうか。2.10進数:-16072 → 2進数:1100 0001 0011 1000
というのは、文字列で「-16072」が与えられた時、文字列として、「1100 0001 0011 1000」を取得したい、ということでしょうか。
この回答への補足
ご回答が遅くなりました
1、VB6
2、数値で -16072(D) が与えられた時、文字列として、「1100 0001 0011 1000」を取得
ご説明不足で申し訳ございません。よろしくお願いいたします
No.1
- 回答日時:
16進数に直してから変換するのが簡単なような気がします。
Function FromDecimalToBinary(X As Long) As String
Dim X16 As String
Dim Y16 As Integer
Dim Y As String
Dim i As Integer
Dim j As Integer
If (X < -32768 Or X > 32767) Then
Y = "Error"
Else
X16 = Right(String(4, "0") & Hex$(X), 4)
For i = 4 To 1 Step -1
Y16 = "&h" & Mid(X16, i, 1)
For j = 1 To 4
Y = Y16 Mod 2 & Y
Y16 = Y16 \ 2
Next j
Next i
End If
FromDecimalToBinary = Y
End Function
又は
Function FromDecimalToBinary(X As Long) As String
Dim X16 As String
Dim Y As String
Dim i As Integer
If (X < -32768 Or X > 32767) Then
Y = "Error"
Else
X16 = Right(String(4, "0") & Hex$(X), 4)
For i = 1 To 4
Select Case Mid(X16, i, 1)
Case "0": Y = Y & "0000"
Case "1": Y = Y & "0001"
Case "2": Y = Y & "0010"
Case "3": Y = Y & "0011"
Case "4": Y = Y & "0100"
Case "5": Y = Y & "0101"
Case "6": Y = Y & "0110"
Case "7": Y = Y & "0111"
Case "8": Y = Y & "1000"
Case "9": Y = Y & "1001"
Case "A": Y = Y & "1010"
Case "B": Y = Y & "1011"
Case "C": Y = Y & "1100"
Case "D": Y = Y & "1101"
Case "E": Y = Y & "1110"
Case "F": Y = Y & "1111"
End Select
Next i
End If
FromDecimalToBinary = Y
End Function
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
あるあるbotに投稿したけど採用されなかったあるある募集
あるあるbotに投稿したけど採用されなかったあるあるをこちらに投稿してください
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
10進数を2進数
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
0xffffとは?
-
8ビットのデータの、先頭ビット...
-
エクセルVBAのIf,Then 構...
-
Python: 数値を反転させたい
-
整数除算の意味とは?
-
一般のソフトで画像を扱う場合...
-
MIPSアセンブラの問題です。
-
[VBS] 素早くローテート演算したい
-
ビットシフトってどんな時使うの?
-
スロースキャンコンピュータ 加...
-
シーケンス制御についての質問...
-
文字参照は10進数と16進数では...
-
ビット演算子
-
COMETII上で動作するアセ...
-
16進数でのAND演算
-
PLC 命令について
-
アクセス(2003)のVBAでビット...
-
FFTの単精度と倍精度の計算時間
-
A4 持ち込み
-
C言語「K&R」の演習2-9について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0xffffとは?
-
8ビットのデータの、先頭ビット...
-
エクセルVBAのIf,Then 構...
-
一般のソフトで画像を扱う場合...
-
ビットシフトってどんな時使うの?
-
シーケンス制御についての質問...
-
文字参照は10進数と16進数では...
-
C言語で128bitの2進数のビット...
-
Python: 数値を反転させたい
-
2の補数
-
verilog 符号付加減算(最上位...
-
アクセス(2003)のVBAでビット...
-
命令について
-
符号無し整数xを右にnビット回転
-
算術シフト演算が成り立つ理由...
-
03分22秒36のような時間の単位...
-
16進数でのAND演算
-
[VBS] 素早くローテート演算したい
-
整数除算の意味とは?
-
Javaの問題について
おすすめ情報