0

C では、
- 符号付き整数変数は負数と正数の両方を格納できます
- 符号なし整数変数は正数のみを格納できますが
、どちらも 4 バイトのメモリが割り当てられます。本を読んだところ、正の数を格納したい場合は、メモリを節約するために符号なし整数変数の使用を検討すると書かれていました。符号付き変数と符号なし変数の両方が同じサイズのメモリ (4 バイト) を割り当てる場合、どのようにメモリを節約できますか?

4

5 に答える 5

7

(この回答は現在、Java ではなく C に関するものです。)

符号付き変数と符号なし変数の両方が同じサイズのメモリ (2 バイト) を割り当てる場合、どのようにメモリを節約できますか?

違いは、幅が同じであっても、2 つの型は異なる値の範囲を表すことができるということです。これは、signed over unsigned を選択した場合、より広いタイプに移動する必要がある場合があることを意味します。

たとえば、0 ~ 60,000 の値を表す必要があるとします。これには、いくつかの選択肢があります。

  • 16 ビットの符号なし整数を使用します。
  • 32 ビットの符号付き整数を使用します。

ご覧のとおり、この範囲にはより広い符号付きタイプを選択する必要があります。16 ビットの signed int は 32,767 までしか使用できないため、使用できません。

于 2013-02-02T12:08:47.713 に答える
1
  1. javaには符号なし整数型はありません(別のトピックであるcharからのappart)

  2. 符号付き数値がある言語では、メモリを節約しませんが、より大きな正の値をサポートし、特定の値が負になることはないことを明示的に示す方法も提供します。

于 2013-02-02T12:10:47.333 に答える
1

質問に直接答えるには、0〜65535の値を格納する必要がある場合は、1つの符号なし2バイト値を使用できます。ただし、符号付きの値を使用する場合、2バイトの符号付きの値は最大32767までしか格納しないため、より多くのバイトを使用する必要があります。おそらく4バイトの符号付きの値を使用する必要があります。これは、もちろんストレージの2倍です。 。

于 2013-02-02T12:12:00.920 に答える
1

どのように表現されても、4 バイトは 4 バイトであることは間違いありません。unsigned を使用すると Java で役立つ唯一のケースは、範囲が 0 ~ 65535 で、 または のいずれかを選択できるchar場合intです。この場合charは小さくなります。注: 符号なしの数値を a に格納することcharは、通常、有用というよりは混乱を招きます。

于 2013-02-02T12:15:52.767 に答える
0

ほとんどの場合、使用する整数型のサイズが必要なサイズよりもはるかに大きいため、一般に、メモリを節約することはできません. -bit int は +/- 20 億の範囲で、4 ビットで十分です。

歴史的に、数字を「奇数」ビット量に「パック」した言語とコンピュータ システムはいくつかありましたが (さらに、代わりに 4 ビットの 10 進数を使用したものも少なくありません)、「現代的な」言語はありませんでした (私は無視しています)。 RPG と COBOL、申し訳ありません) がそれを行います。

そのため、青月に一度、符号なしの値を使用してストレージを節約できますが、それはまれです。

ただし、符号なしの値は予期しない動作をする可能性があるため、2 つの型の違いを理解することが重要です。たとえば、(これまでで最も奇妙なケースではありません)for( unsigned int i = 100; i < 0; i--)は無限ループiです。

したがって、unsigned int にはドラゴンが存在します。

于 2013-02-02T12:58:12.840 に答える