• <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>
            posts - 183,  comments - 10,  trackbacks - 0

            將一個(gè) int 型的數(shù)按位輸出。進(jìn)行循環(huán)移位,檢測最左邊的位是否非零,然后輸出 1 或 0 即可。

            對 int 型的數(shù)中的位進(jìn)行逆序。考慮逆序的特征,可以利用棧進(jìn)行逆序,從左往右進(jìn)行壓棧,彈出的時(shí)候 ret = 2 * ret + s.top();

            如果從右往左壓棧,在彈出棧的時(shí)候,有個(gè)記錄項(xiàng) m = 0;ret = ret + pow(2, m++)。

            也可以采用另一種方式在原地逆序,循環(huán)這個(gè)位。對左右兩邊的對稱位進(jìn)行檢測,設(shè)置各自的掩碼。如果左右兩邊的位不一致,則相互設(shè)置相反。

            為的逆序來自一思科面試題。

            實(shí)現(xiàn):

              1 #include <iostream>
              2 #include <stack>
              3 using namespace std;
              4 
              5 // 輸入一個(gè) int 數(shù)的二進(jìn)制位
              6 void foo(int n)
              7 {
              8     static int t = 1 << (sizeof (int* 8 - 1);
              9     for (int i = 0; i < sizeof (n) * 8++i)
             10     {
             11         if ((n & t) == 0)
             12         {
             13             cout << 0;
             14         }
             15         else
             16         {
             17             cout << 1;
             18         }
             19         n <<= 1;
             20     }
             21     cout << endl;
             22 }
             23 
             24 // 將 int 中的各位逆序
             25 // 這里使用一個(gè)棧來實(shí)現(xiàn)逆序
             26 int bar(int* a, int b)
             27 {
             28     static int t = 1 << (sizeof (int* 8 - 1);
             29     *= 0;
             30     stack<int> s;
             31     for (int i = 0; i < sizeof (int* 8 - 1++i)
             32     {
             33         if ((b & t) == 0)
             34         {
             35             s.push(0);
             36         }
             37         else
             38         {
             39             s.push(1);
             40         }
             41         b <<= 1;
             42     }
             43     while (!s.empty())
             44     {
             45         *= 2 * (*a) + s.top();
             46         s.pop();
             47     }
             48     return *a;
             49 }
             50 
             51 // 第二種實(shí)現(xiàn)方式
             52 // 直接在原地交換,設(shè)置掩碼
             53 int reverse(int n)
             54 {
             55     int len = sizeof (int* 8;
             56     int a, b;
             57     int t1, t2;
             58     // int t = -1;
             59     int t = 0;
             60     t = (1 << (len - 1)) - 1 + (1 << (len - 1));
             61     for (int i = 0; i < len / 2++i)
             62     {
             63         t1 = 1 << (len - i - 1);
             64         t2 = 1 << i;
             65         a = t1 & n;
             66         b = t2 & n;
             67         cout << "test" << endl;
             68         foo(t1);
             69         foo(t2);
             70         foo(a);
             71         foo(b);
             72         foo(t);
             73         if (a == 0 && b != 0)
             74         {
             75             n &= (t - t2);
             76             n |= t1;
             77         }
             78         else if (a != 0 && b == 0)
             79         {
             80             n &= (t - t1);
             81             n |= t2;
             82         }
             83         foo(n);
             84     }
             85     return n;
             86 }
             87 
             88 int main()
             89 {
             90     int n = 2// 2;
             91     cout << (n << 1<< endl;
             92     cout << (n >> 1<< endl;
             93 
             94     foo(n);
             95     foo(-2);
             96     foo(1 << (sizeof (int* 8 - 1));
             97 
             98     n = 2;
             99     int m;
            100     m = bar(&m, n);
            101     foo(n);
            102     foo(m);
            103 
            104     n = 7;
            105     m = reverse(n);
            106     foo(n);
            107     foo(m);
            108     return 0;
            109 }

             

            posted on 2011-05-19 14:14 unixfy 閱讀(584) 評(píng)論(0)  編輯 收藏 引用

            只有注冊用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久精品人人做人人妻人人玩| 99热热久久这里只有精品68| 久久亚洲精品无码观看不卡| 久久国产成人午夜AV影院| 国产ww久久久久久久久久| 三级片免费观看久久| 2021久久精品免费观看| 久久综合给久久狠狠97色| 丁香久久婷婷国产午夜视频| 亚洲欧美国产日韩综合久久| 蜜臀av性久久久久蜜臀aⅴ麻豆| 精品久久久噜噜噜久久久 | 久久综合综合久久狠狠狠97色88| 久久精品国产只有精品2020| 无码精品久久一区二区三区| 久久精品天天中文字幕人妻| 日本精品久久久久久久久免费| 蜜臀av性久久久久蜜臀aⅴ| 人人狠狠综合88综合久久| 国产精品禁18久久久夂久| 香蕉久久夜色精品国产2020| 久久国产精品-国产精品| 久久婷婷色综合一区二区| 2020最新久久久视精品爱| 久久久久av无码免费网| 久久精品国产亚洲Aⅴ蜜臀色欲 | 久久精品无码专区免费东京热 | 99久久人人爽亚洲精品美女| 亚洲国产精品无码久久久秋霞2| 久久伊人精品青青草原日本| 国产日韩欧美久久| 国产精品久久自在自线观看| 久久综合狠狠综合久久综合88| 亚洲中文字幕伊人久久无码 | 色婷婷综合久久久久中文字幕| 日本一区精品久久久久影院| 久久精品免费一区二区三区| 久久久久无码精品国产| 99久久精品午夜一区二区| 久久亚洲国产成人精品性色| 久久香蕉国产线看观看精品yw|