Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 大于0xFFFFFF的无符号长_C++_Integer_Overflow_Sizeof - Fatal编程技术网

C++ 大于0xFFFFFF的无符号长

C++ 大于0xFFFFFF的无符号长,c++,integer,overflow,sizeof,C++,Integer,Overflow,Sizeof,如果无符号长最大值为4294967295,测试程序如何生成4294967297 #包括 使用名称空间std; 无符号长毫秒差异(当时无符号长,现在无符号长){ 返回now

如果无符号长最大值为4294967295,测试程序如何生成4294967297

#包括
使用名称空间std;
无符号长毫秒差异(当时无符号长,现在无符号长){
返回nowcout原因是编译器定义
无符号长整型
的方式与定义
无符号长整型
的方式相同:)

这是一个演示程序

#include <iostream>
#include <limits>

int main()
{
    std::cout << "sizeof( unsigned long ) = " << sizeof( unsigned long ) << '\n';
    std::cout << "The maximum values is " << std::numeric_limits<unsigned long>::max() << '\n';
}
如果无符号长最大值为4294967295,测试程序如何生成4294967297

考虑到这个前提,它不能

但是,无法保证
无符号长
最大值正好是4'294'967'295,因此您的前提可能无效。该最大值对应于32位数字可以表示的最大值。32是(
无符号长
所需的最小宽度,但它可能比这更宽


特别是,对于一些64位系统来说,有64个比特的<代码>未签名的长< /代码>,它的最大值为18’46'74’07'709'551 '615.

“未签名的长最大值是4294967295”这是不正确的前提。C++给出了两种整数类型的保证。关于
unsigned long
的唯一保证是它大于或等于
unsigned int
。实际大小由实现定义。@EugeneX,整数大小表高度依赖于体系结构和ABI。它在所有平台上都不相同。有目标系统(通常是DPS)其中,
char
可以是16位。在旧系统中,“字符”可以是6、7或9位,也可以是“字”(通常是
int
)可以是18或36位。简言之,整数类型在规范中没有固定的大小,只有最小大小。请记住,即使
char
可以是任意位数,
sizeof(char)
将始终等于
1
,谢谢您的描述,现在我将知道ulong是8字节长的…
现在我将知道ulong是8字节长的
您知道在特定系统上它是8字节。这种假设在不是8字节的系统上不成立。@EugeneX不总是这样。标准仅保证它至少是32位。@EugeneX它取决于使用的编译器。一些实现将其大小定义为4字节,另一些定义为8字节。
sizeof( unsigned long ) = 8
The maximum values is 18446744073709551615