国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

javascript 二進(jìn)制運(yùn)算技巧解析

2024-05-06 14:20:53
字體:
供稿:網(wǎng)友
1、原碼、反碼、補(bǔ)碼,正數(shù)減法轉(zhuǎn)補(bǔ)碼加法
js 在進(jìn)行二進(jìn)制運(yùn)算時(shí),使用 32 位二進(jìn)制整數(shù),由于 js 的整數(shù)都是有符號數(shù),最高位0表示正數(shù),1表示負(fù)數(shù),因此,js 二進(jìn)制運(yùn)算中使用的整數(shù)表達(dá)范圍是
代碼如下:
-Math.pow(2,31) ~ Math.pow(2,31)-1 // -2147483648 ~ 2147483647

原碼:最高位 0 表示正,1表示負(fù),其余 31 位是該數(shù)的絕對值(真值的絕對值)的二進(jìn)制形式
反碼:正數(shù)反碼與原碼相同,負(fù)數(shù)反碼是原碼符號位不變,其余31位取反(0變1,1變0)
補(bǔ)碼:正數(shù)補(bǔ)碼與原碼相同,負(fù)數(shù)補(bǔ)碼為反碼加 1 (符號位參與運(yùn)算,其實(shí)只有求 -0 的補(bǔ)碼才涉及最高位進(jìn)位,因此不用擔(dān)心在反碼加1時(shí)由于符號位參與運(yùn)算進(jìn)位而使 - 變 +)。
+0 的反碼:32個(gè)0 ,按正數(shù)處理,原碼、反碼、補(bǔ)碼都是0。
-0 的反碼:最高位1,其余位由 +0 原碼取反,得到 32 個(gè) 1
-0 的補(bǔ)碼:其反碼是 32 個(gè) 1 加 1,最高位溢出被舍棄,得到 32 個(gè)0
因此,正負(fù) 0 的補(bǔ)碼都是 0.
由負(fù)數(shù)的補(bǔ)碼求他的絕對值補(bǔ)碼:負(fù)二進(jìn)制數(shù)的絕對值,只要各位(包括符號位)取反,再加1,就得到其絕對值。
計(jì)算機(jī)在處理加減運(yùn)算時(shí),使用補(bǔ)碼進(jìn)行運(yùn)算,減法被視為加上一個(gè)負(fù)數(shù),在處理負(fù)數(shù)時(shí),用負(fù)數(shù)的補(bǔ)碼進(jìn)行加法可以即可得到正確運(yùn)算結(jié)果,補(bǔ)碼是為了統(tǒng)一加減運(yùn)算而生的。
正數(shù)減法轉(zhuǎn)補(bǔ)碼加法的原理是 32 位數(shù)溢出:
對于32 位二進(jìn)制正整數(shù)來說,其模為
代碼如下:
Math.pow(2,32) = 4294967296

32 位正整數(shù)最大表達(dá)范圍是 4294967296 - 1 ,達(dá)到 4294967296 這個(gè)值就要進(jìn)位到33位,33 位是溢出位被丟棄,只得到32 個(gè)0(這個(gè)道理跟表盤上 0 點(diǎn) 和12 點(diǎn)的時(shí)針指在同一個(gè)位置是一樣的,表盤以 12 為模),因此,一個(gè)數(shù)逐漸增大,一旦超出 4294967296-1 的數(shù) M 就可以表示為 M%4294967296
而負(fù)數(shù) -M (M為絕對值)可以表示為一個(gè)正數(shù): 4294967296 - M(這個(gè)正數(shù)就是負(fù)數(shù)的補(bǔ)碼對應(yīng)的二進(jìn)制正整數(shù),負(fù)數(shù)的補(bǔ)碼按32位二進(jìn)制數(shù),與他的原碼相加剛好等于模 ),道理跟表盤一樣,11點(diǎn)和負(fù)1點(diǎn)指在同一個(gè)位置。
以 -3 為例:
代碼如下:
(Array(32).join("0")+(3).toString(2)).slice(-32); // |-3| 的二進(jìn)制數(shù),即原碼
原碼 = 00000000000000000000000000000011;
反碼 = 11111111111111111111111111111100; //原碼符號位為1,其余位取反
補(bǔ)碼 = 11111111111111111111111111111101; //反碼加1因?yàn)榉创a由正數(shù)形式的原碼低31位取反得到,因此這兩個(gè)數(shù)的低31位全都是1,加上反碼符號位1,得到32 個(gè)1
那么,有
補(bǔ)碼+原碼 = (反碼+1)+原碼
= (反碼+原碼)+1
= 1+(32位全是 1 的二進(jìn)制數(shù)) //因?yàn)榉创a由正數(shù)形式的原碼的低31位取反加上符號位1得到,因此這兩個(gè)數(shù)的和的低31位全都是1,加上反碼符號位1,得到32 個(gè)1
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 溆浦县| 获嘉县| 华宁县| 永济市| 阜阳市| 天长市| 铁岭县| 文昌市| 巨鹿县| 河池市| 榕江县| 玉树县| 枣强县| 昌乐县| 三穗县| 汝州市| 白城市| 台中县| 石泉县| 云安县| 泰顺县| 临洮县| 永城市| 普定县| 永顺县| 洛川县| 定远县| 库伦旗| 浠水县| 夹江县| 南木林县| 石狮市| 洛浦县| 曲靖市| 赫章县| 孝义市| 通城县| 县级市| 石景山区| 北票市| 无锡市|