答えて
。
ビット数を符号化する(この場合)ですが、あなたは、符号化ビットを解釈するために番号(符号付きまたは符号なし整数、固定小数点または浮動小数点)のどのようなものを知っている必要があります。
数が、それは符号なしだならば、それはそれだけでは、これらの4ビットから決定することはできません15.
だ、その後、適切な解釈が-1で、2の補数に調印することになっている場合、それは単に十分ではありません情報。
これはもちろん、「フルサイズ」の値にも当てはまりますが、int
またはunsigned int
になる可能性があります。ビットを正しく解釈するには、そのことを知る必要があります。
更新:あなたがあなたの番号が署名することになっているを知っ場合は、それに対処する最も簡単な方法(一般的に署名した4ビットの整数型を持っていないCを、仮定は)にあります記号をに拡張して使用可能な形式にします。
符号拡張は、単に、より少ないビット数の最上位ビットを取って、そしてまで左(を含む)ターゲット一方の最上位ビットにそれを繰り返すことを含みます。
だからあなたの場合には、あなたがその最上位ビットが1 int8_t
に拡張され0xf
を、持っている、我々が得る:
const int8_t number = 0xff;
はどれ-1。 Cは、ネイティブにそれらに対処することはできませんので、
は、任意のいくつかのビット数から、この符号拡張を行うには、組み込みの方法はありません。ここで
は単純なアプローチです:
// Sign-extend a n-bit number into 32 bits.
int32_t extend(uint32_t bits, size_t n)
{
const bool top = bits & ((uint32_t) 1 << (n - 1));
if (top)
{
for (size_t i = n; i < 32; ++i)
bits |= 1 << i;
}
return bits;
}
あなたの番号で上記を呼び出す場合:
printf("%d\n", (int) extend(0xf, 4));
それは-1
を印刷します。
@ryykerいいえ、ナンバーの幅は問題ではありません。「2ビットの数字を扱っていますが、「11」は何ですか?または "私は16ビットの数字を扱っています、何が' 1111111111111111'ですか? "私はあなたの2番目の見積もりのテキストを理解していません。 – unwind
- 1. 負の小数の10進数を2進数に変換する方法
- 2. 2進数を8進数に変換する方法は?
- 3. 2の補数、2つの負の2進数を減算する
- 4. 負の数の2の補数の16進数を取得
- 5. JavaScript(2)でOSパス区切りを判別する方法は?
- 6. Haskellの負の十進数
- 7. クラスの2つのインスタンスを区別する方法
- 8. イメージ内の2つの行を区別する方法
- 9. "/:param"と "/ param"の2つの経路を区別する方法
- 10. 2進数のセットを区別するための最小ビット数を見つけるアルゴリズム
- 11. 時間を区別する方法は?
- 12. エラーコードを区別する方法は?
- 13. サブタイプを区別する方法は?
- 14. Cap'n Protoで複数のメッセージタイプを区別する方法は?
- 15. 開始モデルの変数を区別する方法は?
- 16. 2つの16進数を入力する方法は?
- 17. 2つのSublimeウィンドウを区別する方法
- 18. 2つのローカル通知を区別する方法
- 19. 複数のクラスを同じ関数で区別する方法
- 20. 関数aspとasaの区別方法
- 21. 関数とクラスメソッドを区別する方法は?
- 22. 16進数への負の整数
- 23. オブジェクトパラメータに渡されたときに、(オブジェクト)nullと(10進数)の間で区別する方法は?
- 24. ランダムカラムMYSQLと区別する方法は?
- 25. openclの正と負の無限大を区別する
- 26. Appium:2つの異なるiOS画面を区別する方法は?
- 27. 16進数を2進数のiphoneに変換するには
- 28. RxJava 2リトライ区別される他のアイテムを進行しながら
- 29. Argparse:パーサとサブパーザの引数を区別する方法
- 30. NASMで2つの数を減算して負の数を得る方法は?
それは形式に依存しますが、それは2の補数だ場合、それはだ-1。 (1の補数の場合は-0、符号+振幅の場合は-7、オフセットバイナリの場合は+7)。 –
*コンテキスト*によって異なります。強力なCPUでもその兆候は分かりません。あなたは適切な指示を使用します。 –
あなたの質問はCに関するものなので、バイナリ数字のシーケンスだけではありません。おそらく、特定の* type *の* object *に* value *が格納されているでしょう。 (そして、そのオブジェクトはビットフィールドでない限り、4ビットよりも大きいです。)あなたがその4ビットをどのような形で正確に説明することができれば、疑問は自分自身に答える可能性があります。そうであるように、あなたはあなたの質問にCについて何も言わない。質問を更新して、使用しているCコードを表示できますか? –