相关疑难解决方法(0)

这个litle程序如何工作?

我试图检查关于C++的QA练习,一个问题让我抓狂!

typedef struct {
    unsigned int i : 1;
} myStruct;

int main()
{
    myStruct s;
    s.i = 1;
    s.i++;
    cout << s.i;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

问题是什么是输出:0/1/2/3/-1 /段错误?

我确实检查了2这是一个错误的答案:D,那么为什么程序显示为0

c++ struct bit-fields

5
推荐指数
1
解决办法
179
查看次数

int v/s.在C长

在我的系统上,我得到:

sizeof ( int )  = 4
sizeof ( long ) = 4
Run Code Online (Sandbox Code Playgroud)

当我检查一个C程序时,两个int&long溢出到负面后:

a = 2147483647;
a++;
Run Code Online (Sandbox Code Playgroud)

如果两者都可以表示相同的数字范围,为什么我会使用long关键字?

c int long-integer

4
推荐指数
3
解决办法
449
查看次数

C字大小和标准尺寸

在本文中,摘自"Linux内核开发"一书:http: //www.makelinux.net/books/lkd2/ch19lev1sec2
它说:

C long类型的大小保证是机器的字大小.然而,在缺点方面,代码不能假设标准C类型具有任何特定大小.此外,无法保证int与long的大小相同

问题是,我认为int与单词大小相同,不长,我找不到任何定义这个说法的官方标准.

有什么想法吗?

c ansi long-integer

4
推荐指数
1
解决办法
4278
查看次数

断言unsigned int确实是正面的不起作用?

我想将两个数字相乘,我知道我的数字总是正数,然后:

unsigned int mulPositiveNumbers(unsigned int a ,unsigned int b)
{
    assert(a > 0);
    assert(b > 0);
    return (a*b);
}
Run Code Online (Sandbox Code Playgroud)

现在,我正在使用断言告诉自己"给定的数字总是积极的".

但是当我跑步时:

int main()
{

    unsigned int res = mulPositiveNumbers(-4,3);

        // more stuff goes here

}
Run Code Online (Sandbox Code Playgroud)

代码不会失败,即使我使用的是负数.为什么?

c++ unsigned assert unsigned-integer

4
推荐指数
1
解决办法
1142
查看次数

斐波那契系列使用Rcpp的意外结果

我只是开始使用Rcpp,如果我错过了一个简单的步骤或类似的东西,我很抱歉...我试过这个?sourceCpp

library(Rcpp)
sourceCpp(code='
  #include <Rcpp.h>

  // [[Rcpp::export]]
  int fibonacci(const int x) {
    if (x == 0) return(0);
    if (x == 1) return(1);
    return (fibonacci(x - 1)) + fibonacci(x - 2);
  }'
)
Run Code Online (Sandbox Code Playgroud)

截至fibonacci(46)一切都很好,但后来我得到:

> fibonacci(47)
[1] -1323752223
> fibonacci(48)
[1] 512559680
> fibonacci(49)
[1] -811192543
> fibonacci(50)
[1] -298632863
Run Code Online (Sandbox Code Playgroud)

根据这个页面,上面应该是:

47 : 2971215073
48 : 4807526976
49 : 7778742049
50 : 12586269025
Run Code Online (Sandbox Code Playgroud)

你得到相同的结果吗?

r rcpp

4
推荐指数
1
解决办法
137
查看次数

有没有办法用8字节(x64)设置C++长类型大小?

GCC使用sizeof(long)=8Visual Studio 编译程序sizeof(long)=4.如何在Winows x64上将sizeof(long)设置为8个字节?

c++ sizeof long-integer

4
推荐指数
1
解决办法
641
查看次数

`long`保证与`size_t`一样宽

当寻找unsigned long足以为size_t争论目的而持有的证据时,printf我遇到了两个事实(oid).

首先,这个答案说明long确实不能保证足够大size_t.另一方面,我看到这个答案暗示printf("%lu", (unsigned long)x)在C99之前使用,x是的size_t.

所以问题是你可以假设或者你保证在C99之前long就足够了.另一个问题是,是否存在适合任何其他标准化整数类型的保证(除了明显的例外情况,例如,等等).size_tsize_tssize_tptrdiff_t

c c89 language-lawyer

4
推荐指数
1
解决办法
703
查看次数

为什么 MinGW-w64 生成 32 位二进制文​​件?

我正在使用标记为x86_64-8.1.0-posix-seh-rt_v6-rev0. 运行时g++ --version,我看到:

g++.exe (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 8.1.0
Run Code Online (Sandbox Code Playgroud)

根据我的理解,这个版本的 g++ 应该默认生成 64 位二进制文​​件。

编译命令是这样的:

g++.exe -std=c++17 -g main.cpp -o main.exe
Run Code Online (Sandbox Code Playgroud)

但是,如果main.cpp看起来像这样:

#include <iostream>
int main() {
    std::cout << sizeof(long);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它打印4而不是8. 我尝试使用-m64编译器标志,但没有任何改变。

我做错了什么,如何解决这个问题?

c++ g++ mingw-w64

4
推荐指数
1
解决办法
298
查看次数

C++:int的默认长度是多少?

我一直在寻找一段时间,但无法找到这个看似简单的问题的明确答案:int的默认长度是多少?

我知道默认情况下会签署一个int.但它是短期还是长期?

根据以下页面中的"基本数据类型"表,默认情况下int是一个long int(4个字节). http://www.cplusplus.com/doc/tutorial/variables/

它总是正确的,还是取决于操作系统(32位/ 64位),编译器还是其他东西?

c++

3
推荐指数
2
解决办法
5286
查看次数

为什么INTEGRAL_MAX_BITS会返回小于64的值?

我正在试图弄清楚我对Windows宏可以期待什么值_INTEGRAL_MAX_BITS.
MSDN的__int64文档说每次使用时都应该使用此代码__int64

#if defined (_INTEGRAL_MAX_BITS) && \
      _INTEGRAL_MAX_BITS >= 64
    typedef signed __int64 int64;
    typedef unsigned __int64 uint64;
#else
    #error __int64 type not supported
#endif
Run Code Online (Sandbox Code Playgroud)

为什么我会看到低于32的值INTEGRAL_MAX_BITS这个问题的答案 表明,在32位Windows上,a long long是64位. VS2013文档说明了这一点

_INTEGRAL_MAX_BITS - 将整数类型的最大大小(以位为单位)报告为整数文字.

由于long long是一个整数类型,即使在32位Windows上,应该返回的最低值是64位,对吧?
为什么必要的_INTEGRAL_MAX_BITS >= 64部分#if

c++ windows

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