最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++右移運算符的一個小坑及解決

 更新時間:2025年09月10日 08:40:32   作者:玄黃問道  
文章指出右移運算符處理負數(shù)時左側(cè)補1導(dǎo)致死循環(huán),與除法行為不同,強調(diào)需注意補碼機制以正確統(tǒng)計二進制1的個數(shù)

我遇到了這么一個函數(shù)

template<typename T>
unsigned char countByt(T byt)
{
    unsigned char num=0;
    while(byt)
    {
        num += (byt & 0x01);
        byt >>= 1;
        // cout<<hex<<byt<<endl;
    }
    return num;
}

很明顯,這個函數(shù)是統(tǒng)計byt二進制下1的個數(shù)。

沒毛病

但當(dāng)我輸入負數(shù)的時候,就會陷入死循環(huán)。

用那行注釋中的東西輸出中間過程:

由此可以看到

  • 非負數(shù)下,右移運算符,左面補0.
  • 負數(shù)下,右移運算符,左面補1.

我對代碼進行如下修改:

template<typename T>
unsigned char countByt(T byt)
{
    unsigned char num=0;
    while(byt)
    {
        num += (byt & 0x01);
        byt/=2;
        //byt >>= 1;
        //cout<<hex<<byt<<endl;
    }
    return num;
}

負數(shù)的結(jié)果:

這個時候,統(tǒng)計的是其所對應(yīng)正數(shù)的1的個數(shù)。

也很好理解

補碼是其正數(shù)按位取反再加1

可以看到,一個數(shù)的正和負,它們最后一位一定是一樣的!

1、如果我們用/=2來的話:

-1/2=0

那結(jié)果跟正數(shù)統(tǒng)計是一樣的。

2、如果我們用>>=1的話:

-1:ffffffff

右移一位后,由于左側(cè)補1,

還是:ffffffff

死循環(huán)就發(fā)生了。

但我在實驗的時候又發(fā)現(xiàn)了有趣的一點:

    int n;
    while(cin>>n)
    {
        cout<<(n>>1)<<endl;

    }
1
0
-1
-1

2
1
-2
-1


3
1
-3
-2


9
4
-9
-5


8
4
-8
-4

可以看到:>>=1 等價于除以2后的(向下)取整。

而 / 運算符,是先對正數(shù)部分取整,再加符號。

因此對兩個int變量a,b:

a/b不一定小于 等于(double)a/b;

    
    while(cin>>a>>b)
        cout<<((a/b)<=((double)a/b))<<endl;
        

輸出:

5 3
1
-5 3
0
-5 -3
1
5 -3
0

總結(jié)

當(dāng)使用右移運算符的時候,一定要注意輸入為負數(shù)的可能!在負數(shù)下 >>1 和 /=2 并不等價!

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言單鏈表貪吃蛇小游戲

    C語言單鏈表貪吃蛇小游戲

    這篇文章主要為大家詳細介紹了C語言單鏈表貪吃蛇小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 如何使用Qt實現(xiàn)實時數(shù)據(jù)動態(tài)繪制的折線圖效果

    如何使用Qt實現(xiàn)實時數(shù)據(jù)動態(tài)繪制的折線圖效果

    使用Qt的QChartView和定時器,本教程詳細介紹了如何動態(tài)繪制折線圖,通過定時器觸發(fā)數(shù)據(jù)點的動態(tài)添加和坐標軸范圍的自動調(diào)整,實現(xiàn)了實時更新數(shù)據(jù)的動態(tài)折線圖應(yīng)用,程序結(jié)合QLineSeries或QSplineSeries繪制折線或樣條曲線,配合動畫效果,展現(xiàn)數(shù)據(jù)變化
    2024-10-10
  • C語言版猜數(shù)字小游戲

    C語言版猜數(shù)字小游戲

    這篇文章主要為大家詳細介紹了C語言版猜數(shù)字小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 循環(huán)隊列詳解及隊列的順序表示和實現(xiàn)

    循環(huán)隊列詳解及隊列的順序表示和實現(xiàn)

    這篇文章主要介紹了循環(huán)隊列詳解及隊列的順序表示和實現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • C語言中的指針新手初階指南

    C語言中的指針新手初階指南

    指針是C語言的靈魂,精華之所在,指針強大而危險,用得好是一大利器,用得不好是一大潛在危害,下面這篇文章主要給大家介紹了C語言中指針的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-10-10
  • C++ 重載與重寫的區(qū)別與實現(xiàn)

    C++ 重載與重寫的區(qū)別與實現(xiàn)

    在面向?qū)ο笳Z言中,經(jīng)常提到重載與重寫,本文主要介紹了C++ 重載與重寫的區(qū)別與實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • visual?studio?2022一個不易發(fā)現(xiàn)的問題

    visual?studio?2022一個不易發(fā)現(xiàn)的問題

    本文主要介紹了visual?studio?2022一個不易發(fā)現(xiàn)的問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C語言之棧和堆(Stack && Heap)的優(yōu)缺點及其使用區(qū)別

    C語言之棧和堆(Stack && Heap)的優(yōu)缺點及其使用區(qū)別

    本篇文章主要介紹了什么是棧(Stack) 、什么是堆( Heap),以及棧和堆的優(yōu)缺點,同時介紹了應(yīng)該什么時候使用堆和棧,有需要的朋友可以參考下
    2015-07-07
  • C語言開發(fā)實現(xiàn)掃雷游戲

    C語言開發(fā)實現(xiàn)掃雷游戲

    這篇文章主要為大家詳細介紹了C語言開發(fā)實現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • C++使用文件實現(xiàn)學(xué)生信息管理系統(tǒng)

    C++使用文件實現(xiàn)學(xué)生信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++使用文件實現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01

最新評論

鄯善县| 资阳市| 江源县| 电白县| 柯坪县| 东台市| 洪江市| 栖霞市| 江永县| 广灵县| 凤庆县| 萍乡市| 苏尼特右旗| 滕州市| 沂源县| 金秀| 聂拉木县| 中方县| 东海县| 张家口市| 华蓥市| 浦城县| 崇礼县| 县级市| 长宁区| 资中县| 邯郸县| 新安县| 新绛县| 自治县| 大名县| 宣汉县| 澳门| 尚志市| 丰都县| 连云港市| 随州市| 察隅县| 九龙城区| 黑河市| 潢川县|