unsigned short
との違いは何unsigned int
ですか?私はそれunsigned short
が0-65,535
であり、unsigned int
または0-65,535
であることがわかりました0-4,294,967,295
。違いがよくわかりません。アーキテクチャのデータ型のサイズを知るにはどうすればよいですか?たとえばc = (unsigned short) d;
、c
がunsigned short
aでdがunsigned int
;の場合。それはどういう意味ですか?からの最初の16ビットは?d
に割り当てられます。c
4 に答える
あなたは本当にとの違いは何であるかを尋ねていshort
ますint
。答えは、それshort
はより狭いかもしれませんが、、と同じ幅かもしれないということint
です。プラットフォームに関係なく、私たちが確かに知っているのは事実上すべてです。多くのプラットフォームには32ビットint
と16ビットshort
がありますが、すべてではありません。
これは、C データ型の歴史を説明するのに役立つリンクです。
http://en.wikipedia.org/wiki/C_data_types
したがって、データ型のサイズはプラットフォームに依存しますが、int の長さが 32 ビットの場合、2^32 の異なる数値 (符号なしの場合は 0 - 4,294,967,295) のいずれかを表すことができます。同様に、short の長さが 16 ビットの場合、2^16 の異なる数値 (符号なしの場合は 0 ~ 65,535) のいずれかを表すことができます。
このリンクは、Visual Studio 2005 の実装の詳細を提供します。ここで、int はサイズが 32 ビット (4 バイト) で、short は 16 ビット (2 バイト) です。
http://msdn.microsoft.com/en-us/library/s3f49ktz(v=vs.80).aspx
正確な実装は、コンパイラによって異なります。
質問の最後の部分については、はい、ショートの最大値よりも大きい int をショートにキャストしようとすると、別の値になります (おそらく最初の 16 ビットですが、確認する必要があります)。 .
変数の型名(short、int、long、doubleなど)が、すべてのマイクロプロセッサアーキテクチャまたはプログラミング言語で特定のビット長を指す必要があるとは言えません。それは主にマイクロプロセッサのアーキテクチャともちろんプログラミング言語の定義に依存しています。一般に、signed / unsigned shortは、signed / unsignedintの半分のビットサイズである必要があります(私は予想します)。
まず最初に、unsignedintとshortが何であるかを理解する必要があります。
すべてがビットに分解されます。
ショートは16ビットで、各ビットは1または0です。簡単にするために、4ビットで示します。
1000 - Unsigned = 8
1000 - Signed = -8
1111 - Unsigned = 15 which is equal to 2^(# of bits) -1
1111 - Signed = -1
符号なしの数値では、数値の範囲が広くなるため、1111=15にすることができます。
ただし、符号付きの数値の場合、最大の可能性は0111=7です。
これで、shortは16ビットになり、
signed range of −32,768 to 32,767 [−(2^15) to 2^15 − 1]
Unsigned range: 0 to 65,53 = 2^16 -1
Intには32ビットがあり、次の範囲を提供します。
Signed:−2,147,483,648 to 2,147,483,647 = −(2^31) to 2^31 − 1
Unsigned: 0 to 4,294,967,295 = 2^16 -1