12ビットのデータ(符号付き)を16ビットのデータに変換したいです。
自分なりに考えたのですが・・・
最上位ビット(符号を表すビット)の位置が違うので左に4ビットシフト、
右に4ビットシフトします(どちらも算術シフトとします)
例
0000 1011 1101 0101 (12bit のデータ)
→1011 1101 0101 0000 (左にシフト)
→1111 1011 1101 0101 (右にシフト)
こうするとたしかに16ビットのデータの最上位ビットには12ビットのデータの符号が
反映されるように思えるんですが、符号を除いた値そのものが変わってしまいますよね?
どうしたらいいでしょうか
切羽詰まってて文章めちゃくちゃで分かりづらいかとは思いますが、解答よろしくお願いします。
No.2ベストアンサー
- 回答日時:
12bitがあって、それが先頭ビットが符号である2の補数表現の形式の整数である。
その数が持ってる値を16bit整数に入れたい。ということでいいですかね。
結論から言うと、符号ビットと同じものを頭4桁に入れる、というのでOKでしょう。
シフトでやった例ですけど、値は変わってません。
わかりやすいのは-1ですけど12bitなら(111111111111)_2です。
んで、16bitなら(1111111111111111)_2です。
符号桁以外の追加も0じゃないのですが、これが正しいです。
そもそも2の補数表現を知らないとか別な表現しているのであればこれは誤りですけど、そうであればどういう条件なのか教えてください。
単純に12ビット目を16ビット目に移したいなら12bitデータと、それを右に11シフト、左に15シフトしたものを足せばいいでしょう。
この回答への補足
k_kotaさんご回答ありがとうございます。
値は変わらないのですか!不思議です。
windowsでの電卓など、簡単に確かめる方法があれば教えてほしいです。
>>12bitがあって、それが先頭ビットが符号である2の補数表現の形式の整数である。
その数が持ってる値を16bit整数に入れたい。ということでいいですかね。
申し訳ないのですが、2の補数を理解していないのでわからないです。
他にも表現方法があったのですね、勉強になります。
私は学生で、授業の課題としてこの問題に取り組んでいるのですが、おそらく初歩的な表現方法の形式であると思っています(初歩的というのがあるのか分かりませんが・・・)
私は問題に取り組む前に補数と表現方法についてよく勉強する必要がありそうですね。
No.3
- 回答日時:
シフトでないといけないのでしょうか。
12bitのデータは例えばAD変換した外部装置からのデータでしょうか。
16bit変数(整数)に取り込んで、2047(7FF)を境として計算してしまえば済むと思うのですが。
(C/C++で質問されているのですからアセンブラではないですよね)
16bit変数nに12bitのデータを格納したとして、
if(n>2047) n=n-4096;
でいいのかな。
この回答への補足
samtomsanさんご回答ありがとうございます。
質問の仕方が雑で申し訳ないです・・・
補足させていただきます
>>シフトでないといけないのでしょうか。
私は学生でして、ビットシフトを学ぶ課題としてこの問題に取り組んでいます。
なので、シフトを用いた方法を教えていただけたら嬉しいです。
しかしながらそのような方法でも処理できるのですね、勉強になります。
>>12bitのデータは例えばAD変換した外部装置からのデータでしょうか。
はい、実際に計測を行う訳ではありませんが、トルクセンサから得たデータがバイナリ形式のファイルで配布され、それを適切にデータ処理せよ のような課題に取り組んでいます。
>>(C/C++で質問されているのですからアセンブラではないですよね)
はい、その通りです。
No.1
- 回答日時:
「符号付き」と言っても数の表現方法は 1通りではありません.
どのような表現方法を念頭において「符号を除いた値そのものが変わってしまいますよね」と言われているのでしょうか?
そして, このような疑問を持つということは, 当然「値が変わっている」ことを確認できているわけですよね? 今の場合, 「どのような値がどのような値になった」から「変わった」ことを認識できたのですか?
この回答への補足
Tacosanご回答ありがとうございます。補足させていただきます。
>>どのような表現方法を念頭において「符号を除いた値そのものが変わってしまいますよね」と言われているのでしょうか?
私の中では、最上位ビットがデータの符号を決め、(16ビットであるとすれば)残りの
15ビットがデータの絶対値というべきか、符号に続く数値の部分を表しているものだと
考えています。(私は学生なのですが、先生が『最上位ビットは符号を決める』とおっしゃいました)
そこで元の(12bit)データが
1011 1101 0101
であったのに対して変換後の(16bit)データが
1111 1011 1101 0101
となってしまっては、先頭から2,3,4,5番目のビットに余計な 1 が入ってしまっているのでは?
と思ったのです (この場合1000 0011 1101 0101となるべきではないのでしょうか?)
>>「変わった」ことを認識できたのですか?
すいません、確認はしてないです。ただの思い込みです・・・
上位5ビットがすべて 1 で良いわけを教えていただけたら嬉しいです
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 情報処理技術者・Microsoft認定資格 2進数の問題を教えてください。 1 2022/07/27 09:42
- 情報処理技術者・Microsoft認定資格 情報技術の問題についてです。 10進数の−36を以下のような16ビットの浮動小数点表示にするといくつ 3 2022/05/21 19:53
- 数学 以下の問題が分かりません。 8ビット浮動小数点数が、最上位ビットから順に符号1ビット、指数部3ビット 4 2023/07/22 16:06
- 物理学 写真の解説の赤枠部分についてですが、 なぜ、(-vk-1)と-が付くのかがわからないです。 解説の③ 1 2023/02/10 23:54
- C言語・C++・C# ハミング符号の解読について 1 2023/05/06 00:20
- 計算機科学 6ビット(符号含む)の二進数 4 2023/04/16 13:22
- その他(コンピューター・テクノロジー) ハードドライブのデータ記憶方法 USBメモリーなどの半導体記憶デバイスは、ビット毎の 0 or 1 1 2023/02/25 12:41
- 計算機科学 ビット計算 2 2023/04/16 14:26
- 工学 疑似乱数生成器 3 2023/01/05 02:06
- その他(データベース) 4進数風なバーコードは何ですか? 2 2022/11/28 23:33
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~12/6】 西暦2100年、小学生のなりたい職業ランキング
- ・ちょっと先の未来クイズ第5問
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
【エクセル】測定時間がバラバ...
-
VBA 空白セルを削除ではない方...
-
多量のSUMIF式を軽くしたい
-
メモ帳(テキストデータ)をExc...
-
EXCELVBAでSQLserverからデータ...
-
SASの時間比較
-
[C言語] コメント文字列を無視...
-
Accessで該当データにフラグを...
-
C# ソケット通信でデータ受信時...
-
0が含まれる幾何平均が「#NUM!」
-
カンマからスラッシュに
-
Fortran カンマを含む数値デー...
-
ExcelVBAでデータ不一致のもの...
-
VBにおいてフォーム間の変数の...
-
EXCEL VBA FREQUENCY関数での...
-
C# でDataTableの更新を高速化...
-
Setステートメントをまとめて記...
-
C#でserialPort送信。RS232Cへ。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
【エクセル】測定時間がバラバ...
-
メモ帳(テキストデータ)をExc...
-
多量のSUMIF式を軽くしたい
-
EXCELVBAでSQLserverからデータ...
-
VBA 空白セルを削除ではない方...
-
VBA 円グラフ 特定条件に一致し...
-
この行は既に別のテーブルに属...
-
カンマからスラッシュに
-
[C言語] コメント文字列を無視...
-
特定のデータの抽出方法を教え...
-
<VB>String→Object
-
S9タイプからXタイプにデータ...
-
エクセルで2つの時系列のデー...
-
C# ソケット通信でデータ受信時...
-
CString型の文字列連結について
-
ユーザーフォームのテキストボ...
-
プログラミング python pandas ...
-
ページ数を求めたい
おすすめ情報