我有一个8字节的数组,我正在尝试将其转换为C++中的有符号长整数,似乎无法弄明白.据我所知,长整数只有4个字节,有人可以提供一些信息吗?如果它是32位还是64位是否重要?
我有一个大数字循环从0到65535(我选择16位只是为了有一个很好的截止点).我正在递增一个int,并且有一个if语句检查int是否为65536.如果是,则将int设置为0; 有点kludgy,但它的工作原理.我知道使用一个短的int并让它溢出会更有效率,但我最初没有这样做,因为短路不能保证是2个字节,这很可能.
这是在linux(ubuntu)机器上运行的C代码.如果我使用短片后来决定在另一个操作系统上运行该程序(或者说,在64位机器上运行它,因为我现在正在测试32位),是否有相当大的机会我的短片仍然是2个字节?我可以在几台不同的机器上轻松测试它,但是这里的一些人已经使用了很多电脑.我应该注意一个可怕的陷阱吗?
可能重复:
int,long等的大小
`long`保证至少为32位?
我想找出我的计算机的每种数据类型的最大值.代码是:
int main() {
using namespace std;
cout << numeric_limits<int>::max() << endl;
cout << numeric_limits<long>::max() << endl;
cout << numeric_limits<long long>::max() << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
打印:
2147483647
2147483647
9223372036854775807
Run Code Online (Sandbox Code Playgroud)
问题1:为什么int
和long
相同?
问题2:上面的输出来自64位的VS2010.我的c ++程序是否以64位运行?
我正在尝试使用fstream读取二进制文件,我之前在那里写过一些数据.
问题是在到达函数结束后,将显示主题中的消息
代码如下:
ifstream in("contrib.bin", ios::in | ios::binary );
char *nume, dim;
in.read((char*)&dim, sizeof(int));
nume = new char[dim + 1];
in.read(nume, dim);
nume[dim] = '\0';
double imp;
in.read((char*)&imp, sizeof(double));
delete [] nume;
Run Code Online (Sandbox Code Playgroud)
现在,我已完成我的作业并寻找这个问题,但面对它的其他人有数组,而我的变量是一个简单的字符.
有人能指出我正确的方向吗?
我在哪里可以获得有关Mac OS X(32位和64位)的unsigned int
编译大小的信息gcc
?一般来说,我希望拥有一个可以使用编译器/设置/平台/类型的资源,并且能够查找该类型的大小.有谁知道这样的事情?
更新:感谢所有回复.我希望在某个地方有更多的东西,而不是我必须在每台机器上编写和运行的代码.
我知道在C++ sizeof(char)
中保证是1,但它是唯一的情况还是有其他内置类型保证具有确切的大小?
特别是语言要求sizeof(bool) == 1
还是sizeof(int) == 4
要求,还是实施细节?
我想保存f
一个以i
不擦除浮点数的方式命名的数组的第三个元素中命名的float变量的值(即,我不想保存1
而不是1.5
)。之后,以我们1.5
在输出中看到的方式完成最后一行(不要使用cout<<1.5;
或cout<<f;
类似的技巧!)
float f=1.5;
int i[3];
i[2] = ... ;
cout<<... ;
Run Code Online (Sandbox Code Playgroud)
有人知道吗?
考虑下面的C代码:
#include <stdio.h>
int main()
{
int i = 012;
printf("%d", i);
}
Run Code Online (Sandbox Code Playgroud)
在O/P上,值i
打印为10.我知道(012)8 =(10)10.但我对C如何存储int
变量值感到困惑.任何人都可以向我解释一下吗?
我之前读过几次,C 中数据类型的长度取决于 PC 上的体系结构。
但最近我阅读了编译器的文档,该文档指定了您可以访问的数据类型以及该数据类型的长度。
所以我的问题是,数据类型长度取决于您使用的编译器、计算机的体系结构或两者?