勤&快

          問(wèn)題其實(shí)就是你期望的東西和你體驗(yàn)的東西之間的差別
          隨筆 - 55, 文章 - 0, 評(píng)論 - 68, 引用 - 0
          數(shù)據(jù)加載中……

          用程序進(jìn)行位運(yùn)算

          計(jì)算機(jī)中存儲(chǔ)的數(shù)據(jù)是按照補(bǔ)碼存儲(chǔ)的。
          怎么樣計(jì)算補(bǔ)碼:
          1. 正數(shù)的補(bǔ)碼是其自身
          2. 負(fù)數(shù)的補(bǔ)碼是對(duì)原碼進(jìn)行求反加一。如:-6的原碼是1000 0110,其中開始的1位符號(hào)為,表示是負(fù)數(shù);那么-6的反碼是除符號(hào)外按位求反,得,1111 1001;再加一,得,1111 1010。所以-6,在計(jì)算機(jī)中實(shí)際是1111 1010。也就是說(shuō),雖然你在屏幕上看到何輸入的都是-6,但是計(jì)算機(jī)對(duì)-6進(jìn)行任何位操作,那么其實(shí)操作的是1111 1010。這里簡(jiǎn)化了-6只用8位表示。
          我的計(jì)算機(jī)中int型為4字節(jié),那么5的二進(jìn)制表示是00000000 00000000 00000000 00000101,那么-6的二進(jìn)制表示是11111111 11111111 11111111 11111010。
           
          主要的位運(yùn)算有:
           
          按位與 &
          按位左移 <<
          按位取反 ~
          按位或 |
          按位右移 >>
          按位異或 ^
          無(wú)符號(hào)右移 >>>
           
          這里以取反運(yùn)算為例。對(duì)x取反,其結(jié)果表示為整數(shù)為 ~(x) = - (x+1)。如~(5) = -(5+1) = -6。
          下面解釋為什么:
          如上面所說(shuō),5的二進(jìn)制表示是00000000 00000000 00000000 00000101,那么按位取反則為11111111 11111111 11111111 11111010,恰好是-6的補(bǔ)碼,所以,機(jī)器認(rèn)為~(5) = -6。
          同樣,~(-6) = 5。同理,-6的表示是11111111 11111111 11111111 11111010,按位求反剛好是5的補(bǔ)碼。
           
          再如,按位左移。2147483645 = 01111111 11111111 11111111 11111101。
          i = 2147483645 << 1,得到的結(jié)果是 i = -6.因?yàn)樽笠埔晃恢蟮慕Y(jié)果就01111111 11111111 11111111 111111010,恰好是-6的補(bǔ)碼。

          posted on 2007-04-05 12:59 daning 閱讀(452) 評(píng)論(0)  編輯  收藏 所屬分類: others

          主站蜘蛛池模板: 潍坊市| 伊川县| 聂拉木县| 阳高县| 离岛区| 蒙山县| 祁连县| 福安市| 吉安县| 保德县| 繁峙县| 阜南县| 兰溪市| 呼伦贝尔市| 边坝县| 武隆县| 松江区| 西藏| 丽江市| 新建县| 淄博市| 富裕县| 那坡县| 溧阳市| 墨竹工卡县| 鲁甸县| 营口市| 南溪县| 游戏| 蚌埠市| 盐池县| 禹州市| 大邑县| 沙田区| 滦南县| 凤城市| 克什克腾旗| 茌平县| 新干县| 池州市| 扎兰屯市|