• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            唐吉訶德

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              5 Posts :: 75 Stories :: 3 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(2)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            最近筆者一直在做JPEG的解碼工作,發現用完全使用哈夫曼樹進行解碼比較費時,而使用表結構存儲編碼和值的對應關系比較快捷,但是也存在比較難處理的地方,比如解碼工作通常是以位為單位的操作,這里必然會涉及到移位操作,而筆者之前對位的操作很少,經驗很欠缺,經過這次歷練終于發現了一個自己曾經忽視的東西,那就是C/C++中的移位操作容易出錯的情況。

            1、什么樣的數據類型可以直接移位

            char、short、int、long、unsigned char、unsigned short、unsigned int、unsigned long都可以進行移位操作,而double、float、bool、long double則不可以進行移位操作。

            2、有符號數據類型的移位操作

            對于char、short、int、long這些有符號的數據類型:

            • 對負數進行左移:符號位始終為1,其他位左移
            • 對正數進行左移:所有位左移,即 <<,可能會變成負數
            • 對負數進行右移:取絕對值,然后右移,再取相反數
            • 對正數進行右移:所有位右移,即 >>

            3、無符號數據類型的移位操作

            對于unsigned char、unsigned short、unsigned int、unsigned long這些無符號數據類型:

            沒有特殊要說明的,使用<< 和 >> 操作符就OK了

            結束語

            8086 中存在邏輯移位、算術移位,而C\C++中的移位似乎既不是邏輯移位,也不是算術移位。

            比如-1,我們若對它右移1位,C的結果仍舊是-1,事實上無論右移多少位始終是-1,邏輯移位得到的結果(8位表示)應該是-128,所以這點要注意

            例子:
            1.將 13800138000  轉為  91 68 31 08 10 83 00 F0  //91為+ 68國家號 不夠位長以F補

            unsigned char *tt = new unsigned char[12];
                    strcpy((char*)tt,"13800138000");
                    tt[11] = 0xFF;
                    unsigned char *ss = new unsigned char[6];
                    cout << (tt[11]<<4) << endl;
                    memset(ss,0xFF,6);
                    int k=0;
                    for(int i=0; i<12; i=i+2)
                    {
                            ss[k++] = (tt[i+1]<<4)+(tt[i]&0x0F);
                    }
            2. 將 整形 轉為 3位字節型16進制,如將 整型 888 轉為 16進制  00 03 78(Debug下有效,Release下無效)
               char param[4] = {0};
                int iParamLen = 888;
                param[0] = iParamLen >> 16;
                param[1] = ((iParamLen >> 8) << 32) >> 32;
                param[2] = (iParamLen << 32) >> 32;

            反之

                char param[4] = {0x00,0x03,0x78};
                int ii1 = 0;
                ii1 = param[0];
                ii1 =ii1 << 8;
                ii1 = ii1 | param[1];
                ii1 =ii1 << 8;
                ii1 = ii1 | param[2];
            posted on 2011-01-23 14:53 心羽 閱讀(557) 評論(0)  編輯 收藏 引用 所屬分類: C/C++
            97久久精品人人澡人人爽| 亚洲色大成网站WWW久久九九| 99久久精品日本一区二区免费| 午夜精品久久久久久中宇| 久久亚洲国产成人精品性色| 97久久精品国产精品青草| 国产高潮国产高潮久久久91 | 久久国产精品一区| 久久天天躁夜夜躁狠狠| 久久久久18| 久久天天躁狠狠躁夜夜2020老熟妇 | 亚洲伊人久久大香线蕉苏妲己| 久久免费国产精品| 日本免费一区二区久久人人澡| 久久丫忘忧草产品| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 久久香蕉一级毛片| 东京热TOKYO综合久久精品| 亚洲AV无码成人网站久久精品大| 欧美午夜A∨大片久久| 亚洲国产精品无码久久久久久曰 | 久久久SS麻豆欧美国产日韩| 久久综合狠狠综合久久97色| 久久夜色撩人精品国产| 久久97久久97精品免视看| 久久综合伊人77777麻豆| 欧美成a人片免费看久久| 久久天天躁夜夜躁狠狠躁2022| 久久精品国产亚洲AV不卡| 无码人妻精品一区二区三区久久久| 久久亚洲sm情趣捆绑调教| 久久w5ww成w人免费| 久久婷婷久久一区二区三区| 久久久久这里只有精品| 伊人久久大香线蕉av一区| 99精品国产在热久久 | 久久久久中文字幕| 午夜久久久久久禁播电影| 久久性精品| 综合久久精品色| 欧美激情精品久久久久久久|