我一直在寻找一段时间,但无法找到这个看似简单的问题的明确答案:int的默认长度是多少?
我知道默认情况下会签署一个int.但它是短期还是长期?
根据以下页面中的"基本数据类型"表,默认情况下int是一个long int(4个字节). http://www.cplusplus.com/doc/tutorial/variables/
它总是正确的,还是取决于操作系统(32位/ 64位),编译器还是其他东西?
在C++中,当使用指向多维数组的指针时,
int arr[2][5];
int (*p)[5] = arr;
Run Code Online (Sandbox Code Playgroud)
a如何int*
与大小不同int (*)[5]
?
我的问题是,我需要加载一个二进制文件并使用文件中的单个位.之后,我需要将其保存为字节.
我的主要问题是 - 选择使用什么数据类型 - char或long int?我可以以某种方式使用字符吗?
如何确定int的大小?
int的大小是否真的取决于处理器.对于32位机器,它将是32位,对于16位,它是16位.
在我的机器上它显示为32位,虽然机器安装了64位处理器和64位Ubuntu.
我不确定之前是否曾经问过类似的问题(至少,我在搜索时找不到任何问题,所以想到问自己).
是什么决定了int
(和其他数据类型)的大小C
.我已经阅读它取决于机器/操作系统/编译器,但没有得到明确/详细的解释,比如什么覆盖了另一个等等.任何解释或指针都会非常有用.
我已经找到了这个问题的不同答案,我知道必须有一个确定的答案.C中四种主要数据类型的最小分配内存大小是多少?int
,double
,float
,和char
是我在想什么的.这些signed
或unsigned
类型是否以任何方式改变尺寸?
C ++试图在许多库函数的规范中使用时间复杂度的概念,但是渐进复杂度是一种基于渐进行为的数学构造,当输入的大小和数字的值趋于无穷大时。
显然,在任何给定的C ++实现中,标量的大小都是有限的。
C ++中复杂性的正式形式化是什么,与C ++操作的有限性和有界性兼容?
备注:毋庸置疑,对于基于类型参数的容器或算法(如STL),复杂度只能用用户提供的操作数(例如对已排序内容的比较)来表示,而不能用基本的C ++语言操作。这不是这里的问题。
编辑:
标准报价:
1本国际标准中的语义描述定义了参数化的不确定性抽象机器。本国际标准对一致性实现的结构没有要求。特别是,它们不需要复制或模拟抽象机的结构。相反,需要遵循一致的实现来(仅)模拟抽象机的可观察行为,如下所述。
2本国际标准将抽象机的某些方面和操作描述为实现定义的(例如,
sizeof(int))
。这些构成了抽象机的参数。[...]
C ++语言是在抽象机器的基础上定义的,它基于标量类型(例如整数类型),具有有限的,已定义的位数,并且只有这么多可能的值。(指针的Dito。)
没有“抽象”的C ++,整数将无界并且可能“趋于无穷”。
这意味着在抽象机中,任何数组,任何容器,任何数据结构都是有界的(即使与可用的计算机及其微小的内存相比,它可能是巨大的(与64位数字相比))。
所以我做了一些测试用新的数据类型很长很长,当我偶然发现了一个小"问题"(例如在C++来底漆第6版).我正在使用climbits库来告诉我长和长支持的最大数量,两者都出现在9223372036854775807.这怎么可能?
#include <iostream>
#include <climits>
int main()
{
std::cout << "int size is " << sizeof(int) << " bytes." << std::endl;
std::cout << "short size is " << sizeof(short) << " bytes." << std::endl;
std::cout << "long size is " << sizeof(long) << " bytes." << std::endl;
std::cout << "long long size is " << sizeof(long long) << " bytes." << std::endl;
std::cout << "Maximum values: " << std::endl;
std::cout << "int: " << …
Run Code Online (Sandbox Code Playgroud) 我尝试打印程序中的最大值int
.使用以下代码::
#include <stdio.h>
#include <limits.h>
int main(void) {
printf("%d",INT_MAX);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:: 2147483647
但是,当我改变我的printf
声明到printf("%lld",INT_MAX);
我的输出成为577732524332023807
.INT_MAX
值应该在范围内long long int
,那么为什么它无法转换INT_MAX
为正确的数字long long int
.
在此先感谢您的帮助.
有人请告诉我这有什么意义,以及如何让它停止?说真的,我疯了还是64位Windows长型只有4个字节?这有什么用呢?我认为本机长原始大小应该与本机寄存器大小相同.
[32-bit Linux]
me@u32:~$ ./sizes32
sizeof(char): 1
sizeof(short): 2
sizeof(int): 4
sizeof(long): 4
sizeof(long long): 8
[64-bit Linux]
me@u64:~$ ./sizes64
sizeof(char): 1
sizeof(short): 2
sizeof(int): 4
sizeof(long): 8
sizeof(long long): 8
[32-bit Windows]
C:\Users\me\Downloads>sizes32.exe
sizeof(char): 1
sizeof(short): 2
sizeof(int): 4
sizeof(long): 4
sizeof(long long): 8
[64-bit Windows]
C:\Users\me\Downloads>sizes64.exe
sizeof(char): 1
sizeof(short): 2
sizeof(int): 4
sizeof(long): 4
sizeof(long long): 8
Run Code Online (Sandbox Code Playgroud)