-1
long  –9,223,372,036,854,775,808 to  9 ,223,372,036,854,775,807
int   –2,147,483,648 to 2,147,483,647
short – 32,768 to 32,767
byte  – 128 to 127

数値が制限されているのはなぜですか?Webアプリケーションのユーザーを識別するための一意の識別子がある場合はどうなりますか。例:Facebook、Google+。彼らには何十億ものユーザーがいます。一意の識別子を格納するために使用しているデータ型。データ型を使用する場合、stringどのように使用でき><演算子を使用できますか。数値を制限する理由はありますか?

ありがとう、カンナン

4

9 に答える 9

4

範囲が制限されている理由は、すべての数値型が特定のバイト数を占めるためです。これにより、型の範囲が決まります。

たとえば、2 バイトの場合、-32,768 から 32,767 (符号なしタイプを使用する場合は 0 から 65,535) の値しか表現できません。

彼らには何十億ものユーザーがいます。

あなたの例でlongは、明らかに数十億の値を表すのに十分な幅があります(数十億にもint適しています)。

文字列データ型を使用する場合、どのように > および < 演算子を使用できますか。

まず、辞書式順序を使用して文字列を比較できます。第 2 に、なぜこの方法でユーザー ID を比較する必要があるのか​​さえ明確ではありません。

于 2013-01-07T08:16:16.943 に答える
2

それはすべてメモリ管理に由来します。コンピューター プログラムは、変数がその有効期間中に使用するメモリ量を知る必要があるため、値が制限されます。

于 2013-01-07T08:16:27.437 に答える
1

これは、(ハードウェアレベルで)数値を表すためにバイナリビットを使用するコンピューターで数値を表す方法と関係があります。したがって、1つのバイナリビットを使用する場合、2つの数値を表すことができます。0と1(もちろん、解釈に応じて、任意の2つの数値にすることができます)。ここで、2つの2進ビットを使用すると、4つの数値00、01、10、および11を表すことができます。次のビットは8つの数値などを示します。パターンを見ますか?常に2の利用可能なビット数の累乗です。

今、私たちがバイトと言うとき、私たちは(通常)8ビットを意味します。これは2^8の可能な数を意味します。ただし、通常、符号(正または負)用に1ビットを予約します。したがって、2^7の数値がゼロの周りに均等に分散されます。または–あなたがそれを置くように128から127。( 2の補数は物事をもう少し複雑にするので、これは多少単純化されています)。

tl; dr:数値範囲を「制限」する理由は、ハードウェアの制限によるものです。

于 2013-01-07T08:24:16.583 に答える
1

これはすべて、コンピューターの 2 進数での数値表現に関するものです。こちらこちらをご覧ください。

于 2013-01-07T08:19:34.473 に答える
0

数値が制限される理由

タイプが無制限ではない理由は、マシンのリソースが無制限ではないためです。

代わりに、ハードウェアで簡単に実装できるデータ型を使用するために消費されるメモリと CPU の両方を削減するのが自然です。これは、バイトの倍数 (8 ビットとして標準化) であり、バイトの 2 のべき乗であるデータ型を意味します。これにより、各データ型が持つことができる一意の値の数が決まります。Javaは、署名された型がより自然に処理できるというAFAIKに基づいて、署名されていない型を1つだけ持つことにより、これをさらに制限しました。

これが、これらのタイプが限定されている理由です。

byte - signed 8 bits => -2^7 to 2^7-1
char - unsigned 16-bits => 0 to 2^16-1
short - signed 16-bits => -2^15 to 2^15-1
int - signed 32-bits => -2^31 to 2^31-1
long - signed 64-bit => -2^63 to 2^63-1

Web アプリケーションのユーザーを識別するための一意の識別子があるとどうなりますか。

通常、一意の識別子は制限されており、base 36 以上でエンコードされています。

例: Facebook、Google+。彼らには何十億ものユーザーがいます。

Alongは 10 億、10 億なので、比較すると非常に小さい数です。;)

一意の識別子を格納するために使用しているデータ型。

64 ビット値で十分です。

文字列データ型を使用する場合、どのように > および < 演算子を使用できますか。

ID の場合、そのような演算子を使用する必要はなく、== と != のみを使用します。

数値を制限する理由はありますか?

あなたのマシンは無制限ではなく、あなたが持っているハードウェアを最大限に活用したいからです.

于 2013-01-07T09:02:18.040 に答える
0

制限する必要があります。数値の最大値と、それらを表すのに必要なバイト数について考えてみてください。また、CPU と RAM には、一度に処理できるビット数など、さまざまな制限があります。

また、Java が Date クラスを非推奨にし、Calendar クラスを推奨した理由も確認してください。Calendar クラスは、非常に大きな数値であるエポックからのミリ秒単位ではなく、時間を表すより良い方法を提供します。おそらくFacebookのユーザー数よりもはるかに多いでしょう。

とはいえ、Java は非常に大きな数を扱うためにjava.math.BigIntegerとを提供します。java.math.BigDecimal

于 2013-01-07T08:20:17.773 に答える
0

整数型は、メモリに格納される方法によって制限されます。これはバイナリ (すべての計算の基礎となる 1 と 0) になります。

バイトは 8 ビット (2 進数) で、8 ビットが格納できる最大のデータは 2^8、つまり 256 です。負の値を許容するために半分に分割すると、引用した -128 から 127 の範囲、または 0 から 255 の範囲になります。符号なしタイプを使用します。(0 も表す必要がある値であるため、これは 256 にならないことに注意してください)

同じことが他のすべての範囲にも当てはまりますが、ビット数が大きくなります。したがって、制限された数を使用する理由は、メモリを節約するためです。

より大きな数値を必要とするシステムは、より多くのメモリを使用してデータを保存できます。システム メモリ以外に固有の制限はありません。

于 2013-01-07T08:21:32.863 に答える
0

Google+ や Facebook などは、ユーザー ID に数字を使用しないに違いありません。そのために使用できる他のタイプがあります。たとえば、グローバルな一意の識別子を意味する GUID です。文字列のように見え、数字とダッシュが含まれており、データベースによって一意であることが保証されています。

また、ユーザーのIDを正確に比較する必要があるとは思えません。

于 2013-01-07T08:21:35.167 に答える
-1

必要に応じて変数を作成できます。

public class MyVariable{
    public byte variable;
    MyVariable(int a){
        variable = new byte[a];
    }
}
于 2013-01-07T08:25:26.440 に答える