在128位数字变为现实之前,长64位并保留很长时间是不是更有意义?
问题实际上有点广泛.
根据过去15年的经验,我目前假设类型的大小如下:
byte = 8 bit
short = 2 bytes
int = 4 bytes
long long = 8 bytes
Run Code Online (Sandbox Code Playgroud)
是否存在可以挑战这种假设的现代操作系统?
我想要得到的价值INT_MIN和INT_MAX,和我试过~0和~0 >> 1,因为最左边的位为符号位.我得到了他们两个-1.
它太混乱了,为什么不~0成为0xffffffff和~0 >> 1将来0x7fffffff?
我有以下代码:
为什么Java认为这不是有效的long.
@Test
public void testOffendingBinaryString() {
String offendingString = "1000000000000000000010101000000000000000000000000000000000000000";
assertEquals(64, offendingString.length());
Long.parseLong(offendingString, 2);
}
Run Code Online (Sandbox Code Playgroud) 我想知道为什么size_t在我可以使用say int类型的地方使用它.它说这size_t是一种返回类型的sizeof运算符.这是什么意思?就像我使用sizeof(int)并存储它返回int类型变量的内容一样,它也可以工作,没有必要将它存储在一个size_t类型变量中.我只是清楚地想要了解使用的基本概念以及size_t一个明显可以理解的例子.谢谢
当将bit-wise应用于unsigned char时,我对C++的行为感到惊讶.
取二进制值01010101b,即0x55或85.在8位表示上不按比特应用应该产生10101010b,即0xAA,或170.
但是,我无法在C++中重现上述内容.以下简单断言失败.
assert(static_cast<unsigned char>(0xAAu) == ~static_cast<unsigned char>(0x55u));
Run Code Online (Sandbox Code Playgroud)
我印刷的值0x55,0xAA和~0x55(如UCHAR)用下面的代码.并且它揭示了按位并不能达到我的预期.
std::cout << "--> 0x55: " << 0x55u << ", 0xAA: " << 0xAAu << ", ~0x55: "
<< static_cast<unsigned>(~static_cast<unsigned char>(0x55u)) << std::endl;
--> 0x55: 85, 0xAA: 170, ~0x55: 4294967210
Run Code Online (Sandbox Code Playgroud)
打印的数字~0x55等于11111111111111111111111110101010b,而不是32位的位数0x55.因此,~即使我明确地将输入转换为a ,操作符也在32位整数上运行unsigned char.这是为什么?
我应用了另一个测试来查看~运算符返回的类型.结果int是unsigned char输入:
template <class …Run Code Online (Sandbox Code Playgroud) 有这个代码:
#include <cstdio>
#include <chrono>
int main()
{
auto d = std::chrono::microseconds(1).count();
printf("%lld", d);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当在64位模式下编译时,会出现警告:
Run Code Online (Sandbox Code Playgroud)main.cpp: In function ‘int main()’: main.cpp:7:19: warning: format ‘%lld’ expects argument of type ‘long long int’, but argument 2 has type ‘long int’ [-Wformat=] printf("%lld", d); ^
在32位模式下编译时使用此警告(使用-m32标志).它看起来就像std::chrono::duration::rep是一个类型的long int在64位程序,并long long int在32位程序.
有没有一种可移植的方式来打印它像%zu说明符size_t?
我想知道为什么在下面的程序中sizeof(int)返回一个不同的值sizeof(int*).
这是一个小程序:
int main(){
std::cout<<sizeof(int)<<endl;
std::cout<<sizeof(int*)<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
4
8
Run Code Online (Sandbox Code Playgroud)
直到现在我记得整数指针的大小是4byte(gcc编译器).如何检查指针的正确大小?它依赖于计算机吗?
我正在运行ubuntu 12.04
# lsb_release -a
Distributor ID: Ubuntu
Description: Ubuntu 12.04 LTS
Release: 12.04
Codename: precise
Run Code Online (Sandbox Code Playgroud)
指针的大小是不是常量(标准大小)8个字节.
MPI基本数据类型对应于主机语言的数据类型,MPI_BYTE和MPI_PACKED除外.我的问题是使用这些MPI基本数据类型有什么好处?或者等效地,为什么仅使用主机语言数据类型是不好的?
我阅读了William Gropp等人的教程.在幻灯片31"为什么是数据类型"中,它说:
(http://www.mcs.anl.gov/research/projects/mpi/tutorial/mpiintro/ppframe.htm)
我没有理解这个解释.首先,如果基本数据类型不同,我不明白为什么使用MPI数据类型可以解决差异,因为基本MPI数据类型对应于主机语言的基本数据类型(基本数据类型).其次,为什么这种面向应用的内存数据布局有两个好处?
任何解答我原始问题的答案都将被接受.任何答案都可以解决我的问题,威廉格罗普的解释也将被接受.
c ×5
c++ ×5
long-integer ×2
32bit-64bit ×1
bit ×1
c++-chrono ×1
c++11 ×1
io ×1
java ×1
long-long ×1
mpi ×1
sizeof ×1
types ×1