在我编辑的代码中,我以前的程序员使用移位运算符将一个中等大的数字添加到size_t整数.当我使用这个特定的整数进行调试时,我发现更改数字并没有产生可预测的结果.
输入:
std::size_t
foo1 = 100000 << 20,
foo2 = 200000 << 20,
foo3 = 300000 << 20,
foo4 = 400000 << 20;
std::cout << "foos1-4:";
std::cout << foo1;
std::cout << foo2;
std::cout << foo3;
std::cout << foo4;
Run Code Online (Sandbox Code Playgroud)
收益率:
foos1-4:
1778384896
18446744072971354112
1040187392
18446744072233156608
Run Code Online (Sandbox Code Playgroud)
我知道这是一种溢出错误,但(据我所知,有限的知识)size_t不应该有那些.据我所知,size_t是一个无符号整数类型,它能够保存几乎无限数量的整数.
根据我对位移运算符的理解,此代码应该将数字乘以2 ^ 20(1048576).链接到此站点上的其他页面: 什么是按位移位(位移)运算符以及它们如何工作?
注意 - 我手工制作foo1似乎是一个溢出错误,32位二进制数字截断,但所有其他看起来对我来说完全随机.
来自http://en.cppreference.com/w/cpp/types/size_t:std :: size_t可以存储任何类型(包括数组)理论上可能的对象的最大大小.从那里我假设问题必须在于如何声明整数或如何操作位移.
这是怎么回事?