相关疑难解决方法(0)

为什么C编译器指定长为32位,长为64位?

在128位数字变为现实之前,长64位并保留很长时间是不是更有意义?

c bit 32bit-64bit long-long long-integer

10
推荐指数
2
解决办法
2万
查看次数

现代操作系统/编译器,其中int(在C中)不是32位?

问题实际上有点广泛.

根据过去15年的经验,我目前假设类型的大小如下:

byte = 8 bit

short = 2 bytes

int = 4 bytes

long long = 8 bytes
Run Code Online (Sandbox Code Playgroud)

是否存在可以挑战这种假设的现代操作系统?

c compiler-construction

9
推荐指数
1
解决办法
663
查看次数

C中〜0的值是多少?

我想要得到的价值INT_MININT_MAX,和我试过~0~0 >> 1,因为最左边的位为符号位.我得到了他们两个-1.

它太混乱了,为什么不~0成为0xffffffff~0 >> 1将来0x7fffffff

c bit-manipulation

9
推荐指数
1
解决办法
3285
查看次数

我注意到整数和多头都有相同的大小.为什么?

刚刚在OSX上注意到这一点,我发现它很好奇,因为我预计长期比int更大.有没有什么好的理由让它们大小相同?

c++

7
推荐指数
2
解决办法
1847
查看次数

为什么Java使用这个长二进制数来使用Long.parseLong(String s,int radix)会冒犯?

我有以下代码:

为什么Java认为这不是有效的long.

@Test
public void testOffendingBinaryString() {
  String offendingString = "1000000000000000000010101000000000000000000000000000000000000000";
  assertEquals(64, offendingString.length());
  Long.parseLong(offendingString, 2);
}
Run Code Online (Sandbox Code Playgroud)

java

7
推荐指数
1
解决办法
3019
查看次数

任何人都可以解释为什么size_t类型与一个例子一起使用?

我想知道为什么size_t在我可以使用say int类型的地方使用它.它说这size_t是一种返回类型的sizeof运算符.这是什么意思?就像我使用sizeof(int)并存储它返回int类型变量的内容一样,它也可以工作,没有必要将它存储在一个size_t类型变量中.我只是清楚地想要了解使用的基本概念以及size_t一个明显可以理解的例子.谢谢

c c++

7
推荐指数
2
解决办法
4950
查看次数

C++ - 不是uchar的比特产生int

当将bit-wise应用于unsigned char时,我对C++的行为感到惊讶.

取二进制值01010101b,即0x5585.在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.这是为什么?

我应用了另一个测试来查看~运算符返回的类型.结果intunsigned char输入:

template <class …
Run Code Online (Sandbox Code Playgroud)

c++ bit-manipulation integer-promotion

7
推荐指数
1
解决办法
904
查看次数

在32位和64位程序中使用std :: chrono :: duration :: rep和printf

有这个代码:

#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位模式下编译时,会出现警告:

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);
                   ^
Run Code Online (Sandbox Code Playgroud)

在32位模式下编译时使用此警告(使用-m32标志).它看起来就像std::chrono::duration::rep是一个类型的long int在64位程序,并long long int在32位程序.

有没有一种可移植的方式来打印它像%zu说明符size_t

c++ io c++11 long-integer c++-chrono

7
推荐指数
2
解决办法
3134
查看次数

为什么sizeof(int)与sizeof(int*)不同?

我想知道为什么在下面的程序中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个字节.

c c++ sizeof

6
推荐指数
3
解决办法
1万
查看次数

MPI数据类型有什么好处?

MPI基本数据类型对应于主机语言的数据类型,MPI_BYTE和MPI_PACKED除外.我的问题是使用这些MPI基本数据类型有什么好处?或者等效地,为什么仅使用主机语言数据类型是不好的?

我阅读了William Gropp等人的教程.在幻灯片31"为什么是数据类型"中,它说:

  • 由于所有数据都按类型标记,因此MPI实现可以支持具有非常不同的内存表示和基本数据类型长度(异构通信)的计算机上的进程之间的通信.
  • 在内存中指定面向应用程序的数据布局
    • 减少实现中的内存到内存副本
    • 允许在可用时使用特殊硬件(分散/聚集)

(http://www.mcs.anl.gov/research/projects/mpi/tutorial/mpiintro/ppframe.htm)

我没有理解这个解释.首先,如果基本数据类型不同,我不明白为什么使用MPI数据类型可以解决差异,因为基本MPI数据类型对应于主机语言的基本数据类型(基本数据类型).其次,为什么这种面向应用的内存数据布局有两个好处?

任何解答我原始问题的答案都将被接受.任何答案都可以解决我的问题,威廉格罗普的解释也将被接受.

types mpi

6
推荐指数
1
解决办法
736
查看次数