首页 > 其他 > 详细

易错点

时间:2021-03-08 16:14:41      阅读:20      评论:0      收藏:0      [点我收藏+]

无符号数与有符号数比较

有时我们可能会遇到一些数据结构的大小的判定,比如判断两个堆(假设为heap1,heap2)中元素个数差值是否大于1

heap1.size() - heap2.size() > 1
heap1.size() > heap2.size() + 1

看似等价的两个比较的不等式,产生的效果未必相同
由于数据结构的大小采用的往往是无符号整型数,如果heap1.size() - heap2.size()的结果为负数,比如\(-1\),在无符号数中实际为\(4294967295\),二进制表示为\(11111111111111111111111111111111\),可以看出无符号数会将有符号数补码的符号位当作正常的数位,所以对应的数值就会很大,显然与我们的判断目的相违背

并且还需要注意,无符号数与有符号数比较时,要将有符号数转化为无符号数

负数移位

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
    int c = -2;

    c >> 1;
    cout << c << endl;

    c >>= 1;
    cout << c << endl;

    c >>= 1;
    cout << c << endl;
    
    return 0;
}

结果
技术分享图片
从c++的代码执行效果来看,负数移位是在补码的基础上进行的,移动之后,填充符号位,正数填0,负数填1
-1的补码为\(11111111111111111111111111111111\),右移一位补码仍为\(11111111111111111111111111111111\),表示的仍然为-1

运算符优先级

加减法的优先级是高于移位运算符的

易错点

原文:https://www.cnblogs.com/G-H-Y/p/14493750.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!