web-dev-qa-db-ja.com

unsigned short vs unsigned int-時々同じ範囲ですか?

_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_で、dが_unsigned int_の場合;それはどういう意味ですか? dからの最初の16ビットはc?に割り当てられます

10
mpluse

あなたは本当にshortintの違いを尋ねています。答えは、shortはより狭いかもしれませんが、intと同じ幅かもしれません。これは、プラットフォームに関係なく、事実上私たちが知っているすべてです。多くのプラットフォームには、32ビットintと16ビットshortがありますが、すべてではありません。

6
John Zwinck

これは、Cデータ型の履歴を説明するための便利なリンクです。

http://en.wikipedia.org/wiki/C_data_types

したがって、データ型のサイズはプラットフォームに依存しますが、intの長さが32ビットの場合、2 ^ 32の異なる数値(符号なしの場合は0-4,294,967,295)のいずれかを表すことができます。同様に、ショートが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

正確な実装は、コンパイラに依存します。

あなたの質問の最後の部分については、もしあなたがshortの最大値よりも大きいintをshortにキャストしようとすると、異なる値になります(おそらく最初の16ビットですが、確認するためにテストする必要があります) 。

1
gavinj500

変数タイプ名(short、int、long、doubleなど)がすべてのマイクロプロセッサアーキテクチャまたはプログラミング言語全体で特定のビット長を指す必要があるとは言えません。それは主にマイクロプロセッサのアーキテクチャと、もちろんプログラミング言語の定義に依存しています。一般に、signed/unsigned shortには、signed/unsigned intの半分のビットサイズが必要です(予想)。

0
ceremcem