std::cout 中两个堆栈大小(使用 size())之间的差异
Difference between two stack size (using size()) in std::cout
我很困惑为什么两个打印语句给出不同的输出。附上下面的代码片段。任何帮助,将不胜感激。谢谢。
stack<int>st1;
stack<int>st2;
st2.push(222);
cout<<"st1 size:"<<st1.size()<<endl;
cout<<"st2 size:"<<st2.size()<<endl;
int a=st1.size();
int b=st2.size();
cout<<"difference:"<<a-b<<endl;
cout<<"difference:"<<(st1.size()-st2.size())<<endl; //why this is giving different ans
/* output:
st1 size:0
st2 size:1
difference:-1
difference:4294967295
*/
因为int
是有符号类型,而std::stack::size()
returns是无符号值。
当结果超出类型可表示的值范围时,无符号整数的计算回绕。
看一下成员函数size
的return类型。我打赌你会发现它是一个无符号类型。
当你用无符号整数计算 0u - 1 时会发生什么?结果不能为 -1,因为该数字不能用无符号类型表示。结果将是一个正数,与 -1 模可表示值的数量一致。这也是该无符号类型可表示的最大值。
我很困惑为什么两个打印语句给出不同的输出。附上下面的代码片段。任何帮助,将不胜感激。谢谢。
stack<int>st1;
stack<int>st2;
st2.push(222);
cout<<"st1 size:"<<st1.size()<<endl;
cout<<"st2 size:"<<st2.size()<<endl;
int a=st1.size();
int b=st2.size();
cout<<"difference:"<<a-b<<endl;
cout<<"difference:"<<(st1.size()-st2.size())<<endl; //why this is giving different ans
/* output:
st1 size:0
st2 size:1
difference:-1
difference:4294967295
*/
因为int
是有符号类型,而std::stack::size()
returns是无符号值。
当结果超出类型可表示的值范围时,无符号整数的计算回绕。
看一下成员函数size
的return类型。我打赌你会发现它是一个无符号类型。
当你用无符号整数计算 0u - 1 时会发生什么?结果不能为 -1,因为该数字不能用无符号类型表示。结果将是一个正数,与 -1 模可表示值的数量一致。这也是该无符号类型可表示的最大值。