<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] # 簡介 位運算符: `<<, >>, >>>, &, |, ^, ~` **位操作只能用于整形數據,對float和double類型進行位操作會被編譯器報錯** ![](https://img.kancloud.cn/8e/6c/8e6c941e96b84ccc0c6692ed3172fa60_843x480.png) 結論: 1. 操作的都是數值型的變量 2. `<<`在一定范圍內,每左移一位,相當于數值*2,但是也不能太大 3. `>>`在一定范圍內,每右移一位,相當于數值/2,但是也不能太大 4. `>>>`右移以后,最高位拿0補 交換2個數字 好處不會溢出 缺點: 適用的數據類型有限制 ~~~ int m = 2; int n = 3; m = m ^ n; //1 n = m ^ n; // 2 m = m ^ n; // 3 System.out.println("m = " + m + " , n = " + n); //m = 3 , n = 2 ~~~ **js中** ~~~ ~~null;??????//?=>?0 ~~undefined;?//?=>?0 ~~0;?????????//?=>?0 ~~{};????????//?=>?0 ~~[];????????//?=>?0 ~~(1/0);?????//?=>?0 ~~false;?????//?=>?0 ~~true;??????//?=>?1 ~~1.2543;????//?=>?1 ~~4.9;???????//?=>?4 ~~(-2.999);??//?=>?-2 ~~~ # 常用技巧 ## 判斷奇偶 只要根據最未位是0還是1來決定,為0就是偶數,為1就是奇數。因此可以用`if ((a & 1) == 0)`代替`if (a % 2 == 0)`來判斷a是不是偶數。 下面程序將輸出0到100之間的所有奇數。 ~~~ for (i = 0; i < 100; ++i) if (i & 1) printf("%d ", i); putchar('\n'); ~~~ ## 交換兩數 一般寫法 ~~~ void Swap(int &a, int &b) { if (a != b) { int c = a; a = b; b = c; } } ~~~ 可以用位操作來實現交換兩數而不用第三方變量: ~~~ void Swap(int &a, int &b) { if (a != b) { a ^= b; b ^= a; a ^= b; } } ~~~ 可以這樣理解: ~~~ 第一步? a^=b 即a=(a^b); 第二步? b^=a 即b=b^(a^b),由于^運算滿足交換律,b^(a^b)=b^b^a。由于一個數和自己異或的結果為0并且任何數與0異或都會不變的,所以此時b被賦上了a的值。 第三步 a^=b 就是a=a^b,由于前面二步可知a=(a^b),b=a,所以a=a^b即a=(a^b)^a。故a會被賦上b的值。 再來個實例說明下以加深印象。int a = 13, b = 6; a的二進制為 13=8+4+1=1101(二進制) b的二進制為 6=4+2=110(二進制) 第一步 a^=b? a = 1101 ^ 110 = 1011; 第二步 b^=a? b = 110 ^ 1011 = 1101;即b=13 第三步 a^=b? a = 1011 ^ 1101 = 110;即a=6 ~~~ ## 變換符號 變換符號就是正數變成負數,負數變成正數。 如對于-11和11,可以通過下面的變換方法將-11變成11 ????? 1111 0101(二進制) –取反-> 0000 1010(二進制) –加1-> 0000 1011(二進制) 同樣可以這樣的將11變成-11 ????? 0000 1011(二進制) –取反-> 0000 0100(二進制) –加1-> 1111 0101(二進制) 因此變換符號只需要取反后加1即可。完整代碼如下: ~~~ //by MoreWindows( http://blog.csdn.net/MoreWindows ) #include <stdio.h> int SignReversal(int a) { return ~a + 1; } int main() { printf("對整數變換符號 --- by MoreWindows( http://blog.csdn.net/MoreWindows ) ---\n\n"); int a = 7, b = -12345; printf("%d %d\n", SignReversal(a), SignReversal(b)); return 0; } ~~~ ## 求絕對值 位操作也可以用來求絕對值,對于負數可以通過對其取反后加1來得到正數。對-6可以這樣: ????? 1111 1010(二進制) –取反->0000 0101(二進制) -加1-> 0000 0110(二進制) 來得到6。 因此先移位來取符號位,int i = a >> 31;要注意如果a為正數,i等于0,為負數,i等于-1。然后對i進行判斷——如果i等于0,直接返回。否之,返回~a+1。完整代碼如下: ~~~ //by MoreWindows( http://blog.csdn.net/MoreWindows ) int my_abs(int a) { int i = a >> 31; return i == 0 ? a : (~a + 1); } ~~~ 現在再分析下。對于任何數,與0異或都會保持不變,與-1即0xFFFFFFFF異或就相當于取反。因此,a與i異或后再減i(因為i為0或-1,所以減i即是要么加0要么加1)也可以得到絕對值。所以可以對上面代碼優化下: ~~~ //by MoreWindows( http://blog.csdn.net/MoreWindows ) int my_abs(int a) { int i = a >> 31; return ((a ^ i) - i); } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看