0
#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)何が起こるでしょうか? そのためのストレージサイズは?

4

3 に答える 3

2

それはintです。したがって、コンパイラ/アーキテクチャに応じて、おそらく 4 バイトです。

実際にはその値をどこにも保存していないことに注意してください。

于 2013-11-05T21:56:04.753 に答える
0

var1short( はストレージunsignedサイズを変更しません)、通常は 2 バイトです (ただし、すべてのシステムであるとは限りません)。リテラル100int、通常は 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

あなたの場合、値はとにかく一時的なものであり、そのストレージサイズはプログラムに影響を与えるべきではありません.

于 2013-11-05T21:58:40.133 に答える
0

収納サイズはsizeof (unsigned int);を格納するために必要なメモリunsigned intは、割り当てる値に依存しません。

実際、割り当ては行っていません。とにかく、正確なメモリ位置がまだありますsizeof(unsigned long)(使用するかどうかに関係なく:)

于 2013-11-05T21:57:02.510 に答える