#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 个字节,具体取决于您的编译器/架构。
请记住,您实际上并没有在任何地方存储该值。
存储大小为sizeof (unsigned int)
;存储 an 所需的内存unsigned int
不取决于您为其分配的值。
事实上,你没有分配任何任务。无论如何,您仍然有一个精确的内存位置sizeof(unsigned long)
(无论您是否使用它:)
var1
是一个short
(unsigned
不改变存储大小),通常是 2 个字节(但不保证是所有系统)。文字100
是int
,通常是 4 个字节,但同样不能保证。short 和 int 的乘积是 int,因此它将使用 int 存储大小。100
您可以通过附加“s”来强制编译器将文字解释为short:
(var1 * 100s)
或附加“我们”的无符号短:
(var1 * 100us)
但这不会改变输出的大小,因为短裤的所有操作首先都涉及到 int 的转换。
如果您想知道程序中任何内容占用了多少字节,只需使用内置函数/运算符sizeof
即可找出:
sizeof(var1 * 100); //calculates size of the expression in bytes
在您的情况下,该值无论如何都是临时的,它的存储大小不应影响您的程序。