#include<stdio.h>
int main(void)
{
unsigned short int var1;
unsigned int var2;
var2 = 37000;
var1 = 36000;
if(var2 < (100 * var1))
printf("True \n");
return 0;
}
上記のコードでは、(100 * var1)
何が起こるでしょうか? そのためのストレージサイズは?
#include<stdio.h>
int main(void)
{
unsigned short int var1;
unsigned int var2;
var2 = 37000;
var1 = 36000;
if(var2 < (100 * var1))
printf("True \n");
return 0;
}
上記のコードでは、(100 * var1)
何が起こるでしょうか? そのためのストレージサイズは?
それはint
です。したがって、コンパイラ/アーキテクチャに応じて、おそらく 4 バイトです。
実際にはその値をどこにも保存していないことに注意してください。
var1
short
( はストレージunsigned
サイズを変更しません)、通常は 2 バイトです (ただし、すべてのシステムであるとは限りません)。リテラル100
はint
、通常は 4 バイトですが、保証されていません。short と int の積は int なので、int ストレージ サイズを使用します。100
「s」を追加することで、コンパイラにリテラルを short として解釈させることができます。
(var1 * 100s)
または「us」を追加することによる unsigned short:
(var1 * 100us)
ただし、ショートに対するすべての操作は最初に int への変換を伴うため、これは出力のサイズを変更しません。
プログラムで何かが何バイトを占めるか知りたい場合は、組み込み関数/演算子sizeof
を使用して調べてください。
sizeof(var1 * 100); //calculates size of the expression in bytes
あなたの場合、値はとにかく一時的なものであり、そのストレージサイズはプログラムに影響を与えるべきではありません.
収納サイズはsizeof (unsigned int)
;を格納するために必要なメモリunsigned int
は、割り当てる値に依存しません。
実際、割り当ては行っていません。とにかく、正確なメモリ位置がまだありますsizeof(unsigned long)
(使用するかどうかに関係なく:)