整型和长整型的大小?

问题描述 投票:0回答:4

我写了这段代码:

#include <stdio.h>
int main(){

        printf("Size of short int: %d \n", sizeof(short));
        printf("Size of int: %d \n", sizeof(int));
        printf("Size of long int: %d \n", sizeof(long));
        printf("Size of float: %d \n", sizeof(float));
        printf("Size of double: %d \n", sizeof(double));
        printf("Size of long double: %d \n", sizeof(long double));



    return 0;
}    

输出在哪里:

Size of short int: 2
Size of int: 4
Size of long int: 4
Size of float: 4
Size of double: 8
Size of long double: 12

自然,整数和浮点数据类型之间存在差异,但是编译器为 long 分配与 int 相同数量的内存背后的原因是什么? long 被设计为处理更大的值,但如果像上面那样完成(对于整数的情况),则没有任何用处。浮点长类型增加了额外的 16 位分配。

我的问题本质上是,如果存在不利用其能力的机器实例,为什么还要长期存在?

来自 K&R 电子书:

The intent is that short and long should provide different lengths of integers where practical; int will
normally be the natural size for a particular machine. short is often 16 bits long, and int either 16 or
32 bits. Each compiler is free to choose appropriate sizes for its own hardware, subject only to the the
restriction that shorts and ints are at least 16 bits, longs are at least 32 bits, and short is no longer
than int, which is no longer than long.

如果您愿意的话,是否有一个“经验法则”来说明机器编译器何时会选择为 long 分配比 int 更多的内存?反之亦然?标准是什么?

c integer long-integer allocation
4个回答
2
投票

如果你愿意的话,是否有一个“经验法则”,用于机器的编译器 会选择为 long 分配比 int 更多的内存吗?和恶习 反之亦然?标准是什么?

标准可能是“目标机器会利用更大的类型吗?”或“目标机器是否具有在该较大类型上运行的本机寄存器和/或指令?”


2
投票

Why have the long if there will be instances of machines that make no use of its abilities?
因为有些机器利用它的能力。


0
投票

“int”至少为 16 位,“long int”至少为 32 位。

“int”最多可容纳 32,767 的值,“long int”最多可容纳 2,147,483,647 的值。

limits.h 头文件中,您可以找到各个机器的最大值和最小值。


-1
投票

在 32 位及更高位的机器上,long 的大小等于 int 的大小,即 32 位。在 16 位机器上,short 的大小等于 int 的大小,即 16 位,而 long 的大小为 32 位。所以在 16 位机器上,长为 32 位,比短和位可以容纳更大的范围。

© www.soinside.com 2019 - 2024. All rights reserved.