我试图检查关于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?
在我的系统上,我得到:
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关键字?
在本文中,摘自"Linux内核开发"一书:http:
//www.makelinux.net/books/lkd2/ch19lev1sec2
它说:
C long类型的大小保证是机器的字大小.然而,在缺点方面,代码不能假设标准C类型具有任何特定大小.此外,无法保证int与long的大小相同
问题是,我认为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)
代码不会失败,即使我使用的是负数.为什么?
我只是开始使用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)
你得到相同的结果吗?
GCC使用sizeof(long)=8Visual Studio 编译程序sizeof(long)=4.如何在Winows x64上将sizeof(long)设置为8个字节?
我正在使用标记为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编译器标志,但没有任何改变。
我做错了什么,如何解决这个问题?
我一直在寻找一段时间,但无法找到这个看似简单的问题的明确答案:int的默认长度是多少?
我知道默认情况下会签署一个int.但它是短期还是长期?
根据以下页面中的"基本数据类型"表,默认情况下int是一个long int(4个字节). http://www.cplusplus.com/doc/tutorial/variables/
它总是正确的,还是取决于操作系统(32位/ 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?