go語言取反 go語言%t

golang 正負數(shù)取反

想要知道取反計算過程,首先搞懂? “原碼“,“反碼”,“補碼”,“取反”。

創(chuàng)新互聯(lián)公司專注于中大型企業(yè)的成都網(wǎng)站制作、網(wǎng)站設(shè)計和網(wǎng)站改版、網(wǎng)站營銷服務(wù),追求商業(yè)策劃與數(shù)據(jù)分析、創(chuàng)意藝術(shù)與技術(shù)開發(fā)的融合,累計客戶近千家,服務(wù)滿意度達97%。幫助廣大客戶順利對接上互聯(lián)網(wǎng)浪潮,準確優(yōu)選出符合自己需要的互聯(lián)網(wǎng)運用,我們將一直專注品牌網(wǎng)站制作和互聯(lián)網(wǎng)程序開發(fā),在前進的路上,與客戶一起成長!

0變1,1變0

原碼是計算機機器數(shù)中最簡單的一種形式,數(shù)值位就是真值的絕對值。原碼表示法在最高位為符號:正數(shù)該位為0,負數(shù)該位為1,原碼又稱帶符號的絕對值??凑麛?shù)9及-9的原碼如下:

9的原碼:0000 1001

-9的原碼: 1000 1001

重點:對于源碼,絕對值相等的正數(shù)和負數(shù)只有符號位不同。

反碼通常是用來由原碼求補碼或者由補碼求原碼的過渡碼。正數(shù)的反碼就是其原碼,負數(shù)的反碼就是將原碼除符號位以外每位取反(0變1,1變0)。例如:

9的反碼:0000 1001

-9的反碼:1111 0110

在計算機系統(tǒng)中,數(shù)值一律用補碼來表示和存儲。正數(shù)的原碼就是其補碼。負數(shù)的補碼是其反碼+1.例如:

9的補碼:0000 1001

-9的補碼:1111 0111

正整數(shù)的原碼、反碼、補碼都是一樣的。負數(shù)的反碼是除符號位其他每一位取反,負數(shù)的補碼是其反碼+1

首先明確一個概念,由于在計算機中二進制都是以其補碼形式存放在內(nèi)存中的。所以要知道 ^9 就是對 9 的補碼取反,也就是說無論是整數(shù)還是負數(shù)對其取反都是對其補碼取反。

正數(shù)9:

原碼為: 0000 1001

反碼為: 0000 1001

補碼為: 0000 1001

1. 取反結(jié)果=負數(shù)補碼 :0000 1001 --- (取反) 1111 0110?

注:由于 ^ 位取反操作符,對于符號位也會取反 所以這里得到一個負數(shù)的補碼,想要計算其真實的值。還需要將其轉(zhuǎn)換成原碼。

2. 得反碼:1111 0110? -? 1? =??1111 0101

補碼 = 反碼 + 1 (反推) 反碼?= 補碼 - 1

3. 得原碼?1111 0101 -- 1111 1010 = -10

原碼? =? 反碼取反

負數(shù)-9:

原碼為: 1111 1001

反碼為: 1111 0110

補碼為: 1111 0111

1. 取反結(jié)果=正數(shù)補碼?1111 0111 ----?0000 1000

2. 正數(shù)原碼 = 反碼 = 補碼 =?0000 1000 = 8

go語言里怎么把整數(shù)變成負數(shù)取相反數(shù)?

取一個數(shù)的相反數(shù),可以用數(shù)學(xué)運算來實現(xiàn):-1 * x的結(jié)果就是x的相反數(shù)。

go語言操作符 ^ 和 &^

很多語言都是采用 ~ 作為按位取反運算符,Go 里面采用的是 ^ 。

如果作為二元運算符,^ 表示按位異或,即:對應(yīng)位相同為 0,相異為 1。

操作符 ^,按位置零,例如:z = x ^ y,表示如果 y 中的 bit 位為 1,則 z 對應(yīng) bit 位為 0,否則 z 對應(yīng) bit 位等于 x 中相應(yīng)的 bit 位的值。

對于有符號的整數(shù)來說,是按照補碼進行取反操作的(快速計算方法:對數(shù) a 取反,結(jié)果為 -(a+1) ),對于無符號整數(shù)來說就是按位取反

計算過程

以3為例? 3在內(nèi)存中補碼為 0*** 0011

取反? ? ? ? ? ? 1*** 1100

-1操作? ? ? ? ? 1*** 1011

除符號位取反? ? 1*** 0100 結(jié)果為-4

-------------------------------------------

以9為例 9在內(nèi)存中補碼為 0*** 1001

取反? ? ? ? ? ? 1*** 0110

-1操作? ? ? ? ? 1*** 0101

除符號位取反? ? 1*** 1010 結(jié)果為-10

-------------------------------------------

以-5為例 -5在內(nèi)存中為的補碼為 1*** 1011

為什么呢

-5源碼? ? ? ? ? 1*** 0101

除符號取反? ? ? 1*** 1010

+1操作? ? ? ? ? 1*** 1011

-------------------------------------------

那么-5取反怎么算

補碼 1***1011取反為 0***0100

因為符號位為0,所以是正數(shù)了,正數(shù)的補碼反碼源碼都是一個,所以是4

===================================

再看-1

-1源碼? ? ? ? ? 1*** 0001

除符號取反? ? ? 1*** 1110

+1操作? ? ? ? ? 1*** 1111

補碼 1*** 1111 取反為 0*** 0000

因為符號位為0,所以是正數(shù)了,正數(shù)的補碼反碼源碼都是一個,所以是0

go語言取反輸出的例子看這里

分享標題:go語言取反 go語言%t
文章位置:http://muchs.cn/article2/ddihdic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、ChatGPT、響應(yīng)式網(wǎng)站、域名注冊微信公眾號、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)