亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原(yuan)創(chuang)

為什么int8的表示范圍是-128-127不是128?

2024-02-28 07:09:50
82
0

寫在前面:學習(xi)go語言基礎的(de)(de)時候(hou)了(le)解到int8的(de)(de)數值表(biao)(biao)示(shi)范圍為-128~127,對這(zhe)個結(jie)論性的(de)(de)結(jie)果表(biao)(biao)示(shi)了(le)解,但仔細推敲發現自己(ji)還是沒(mei)懂(dong)其所以然,查閱相關(guan)博(bo)客遂成(cheng)此篇,原理為大一學的(de)(de)數字邏(luo)輯內容。

背景知識補充:

機(ji)器數:

一個數在計算機(ji)中的二進制表示方式,叫做這個數的機(ji)器(qi)(qi)數。機(ji)器(qi)(qi)數是帶(dai)符(fu)號的,計算機(ji)用最高數位存放符(fu)號,正數為 0,負數為 1

例如:

var number int8 = 3
對應的機器數為0000 0001 (0表示整數,1表示負數)

原碼:

原(yuan)碼就是符號位加(jia)上(shang)真值(zhi)的(de)絕對值(zhi)。比如下面這個

[+1]原(yuan) = 0000 0001

原碼(ma)是最容(rong)易理解(jie)的。因為第一位(wei)是符號(hao)位(wei),所以 8 位(wei)的二進制原碼(ma)的取值范(fan)圍是

[11111 1111,0111 1111] 即 [-127,127]

反碼:

正(zheng)數(shu)的反碼(ma)(ma)是它本身,負數(shu)的反碼(ma)(ma)是在其原(yuan)碼(ma)(ma)的基礎上,符號位不變,其余各個(ge)位取反

[+1] = [0000 0001]原 = [0000 0001]反

這樣的話,如果一個反(fan)碼(ma)表示的是(shi)負數,你無法直觀(guan)的看出它的數值,通常需(xu)要轉化(hua)成原碼(ma)再進行計算。

補碼:

整數(shu)的補碼就是(shi)它本身,負數(shu)的補碼為源碼基礎上,符號位(wei)(wei)不變,其余位(wei)(wei)取(qu)反(fan),末(mo)位(wei)(wei)+1,等價于在反(fan)碼的基礎上+1

[+1] = 原碼[0000 0001] = 反碼[0000 0001] = 補碼[0000 0001]
[-1] = 原碼[1000 0001] = 反碼[1111 1110] = 補碼[1111 1111]

原(yuan)碼->反碼->補碼的引入原(yuan)理

為簡化計(ji)算機的運算設計(ji),讓符號位參與運算,減法可視(shi)為加上一個(ge)負數(shu)

例如;

十進制(zhi)的表達式 1-1=0

1-1 = 1+(-1) = 原碼[0000 0001] + 源碼[1000 0001] = 源碼[1000 0010] = -2 

結論:源碼讓符號位參與運(yun)算(suan),對于減法來(lai)說,結果是(shi)不(bu)準確的,這就是(shi)為何計算(suan)機內部不(bu)使用(yong)原(yuan)碼表示一(yi)個數

為解決原碼(ma)減法存(cun)在的(de)問(wen)題,引入(ru)反碼(ma)

1-1 = 1+(-1) = 原碼[0000 0001] + 源碼[1000 0001]=
                 反碼[0000 0001] + 反碼[1111 1110]= 反碼[1111 1111] = 原碼[1000 0000]=-0

結論:反碼(ma)(ma)計算(suan)減(jian)法,真(zhen)值(zhi)部分是正確的,但是存在+0和-0的問(wen)題(ti),兩(liang)個編碼(ma)(ma)[0000 0001]和[1000 0000]兩(liang)個編碼(ma)(ma)表示0

為解(jie)決補碼存在的+0 和 -0問題,引入補碼

1-1 = 1+(-1)= 原碼[0000 0001] + 源碼[1000 0001]=
                補碼[0000 0001] + 補碼[1111 1111] = 補碼[0000 0000] = 原碼[0000 0000]

結論:通(tong)過引入補碼(反(fan)碼負數時符號(hao)位不變,末位加一)實現0的唯(wei)一編(bian)碼

因此(ci)可以用[1000 0000]表示-128,此(ci)時補碼的數值表示范(fan)圍為(wei)[-128,127]

注意:-128沒(mei)有原碼(ma)(ma)和反碼(ma)(ma)表示

0條評論
0 / 1000
貳拾畫生
16文章數
0粉絲數(shu)
貳拾畫生
16 文章 | 0 粉絲
貳拾畫生
16文(wen)章(zhang)數
0粉絲數
貳拾畫生
16 文章 | 0 粉絲
原創(chuang)

為什么int8的表示范圍是-128-127不是128?

2024-02-28 07:09:50
82
0

寫在前面:學(xue)習(xi)go語言基礎的時候了解到int8的數值表(biao)示范圍為-128~127,對這個結論性的結果表(biao)示了解,但仔細(xi)推敲(qiao)發現(xian)自己還(huan)是沒(mei)懂其所以然,查閱相關博客(ke)遂成此篇,原理為大一(yi)學(xue)的數字邏(luo)輯(ji)內容。

背(bei)景(jing)知識補充:

機器數:

一個(ge)(ge)數(shu)在計算機中的(de)二進(jin)制表示方式,叫做這個(ge)(ge)數(shu)的(de)機器(qi)數(shu)。機器(qi)數(shu)是帶符號的(de),計算機用最高數(shu)位存放符號,正數(shu)為(wei) 0,負數(shu)為(wei) 1

例如(ru):

var number int8 = 3
對應的機器數為0000 0001 (0表示整數,1表示負數)

原碼:

原碼就是符號位加(jia)上真值的絕對值。比如下面這個

[+1]原(yuan) = 0000 0001

原(yuan)碼是(shi)(shi)最容易理解的(de)。因為第一位是(shi)(shi)符(fu)號位,所以 8 位的(de)二進(jin)制原(yuan)碼的(de)取值范圍(wei)是(shi)(shi)

[11111 1111,0111 1111] 即 [-127,127]

反碼(ma):

正(zheng)數的(de)反(fan)碼(ma)是它本身(shen),負數的(de)反(fan)碼(ma)是在其(qi)(qi)原碼(ma)的(de)基礎上,符號(hao)位(wei)不變(bian),其(qi)(qi)余各個位(wei)取(qu)反(fan)

[+1] = [0000 0001]原 = [0000 0001]反

這樣的(de)話,如果一個(ge)反碼(ma)表示的(de)是(shi)負數(shu),你無法(fa)直觀的(de)看出(chu)它的(de)數(shu)值(zhi),通常需要轉(zhuan)化成原碼(ma)再進行計算。

補碼:

整數的(de)補碼就是它本身,負數的(de)補碼為源碼基礎上,符號(hao)位(wei)不變,其余(yu)位(wei)取反,末位(wei)+1,等價于在反碼的(de)基礎上+1

[+1] = 原碼[0000 0001] = 反碼[0000 0001] = 補碼[0000 0001]
[-1] = 原碼[1000 0001] = 反碼[1111 1110] = 補碼[1111 1111]

原碼(ma)->反碼(ma)->補碼(ma)的引入(ru)原理

為簡化計算(suan)(suan)機的(de)運算(suan)(suan)設計,讓符號位(wei)參(can)與運算(suan)(suan),減法可視(shi)為加上一個負數(shu)

例如(ru);

十進制的表達式(shi) 1-1=0

1-1 = 1+(-1) = 原碼[0000 0001] + 源碼[1000 0001] = 源碼[1000 0010] = -2 

結論:源碼讓符號位參與運算,對于減法來說,結果是不準(zhun)確的,這(zhe)就是為何計算機內部(bu)不使用原碼表(biao)示(shi)一個數

為解決原碼減法存在(zai)的問題(ti),引入反碼

1-1 = 1+(-1) = 原碼[0000 0001] + 源碼[1000 0001]=
                 反碼[0000 0001] + 反碼[1111 1110]= 反碼[1111 1111] = 原碼[1000 0000]=-0

結論:反碼計算減法,真值(zhi)部分是(shi)(shi)正(zheng)確的,但是(shi)(shi)存在+0和-0的問(wen)題,兩(liang)個(ge)(ge)編碼[0000 0001]和[1000 0000]兩(liang)個(ge)(ge)編碼表示0

為解決(jue)補碼存(cun)在的+0 和 -0問題,引入(ru)補碼

1-1 = 1+(-1)= 原碼[0000 0001] + 源碼[1000 0001]=
                補碼[0000 0001] + 補碼[1111 1111] = 補碼[0000 0000] = 原碼[0000 0000]

結(jie)論:通過引入補碼(ma)(反碼(ma)負數(shu)時符號位(wei)不變,末(mo)位(wei)加一)實現0的唯一編碼(ma)

因此可以用[1000 0000]表(biao)示(shi)-128,此時補(bu)碼(ma)的(de)數(shu)值表(biao)示(shi)范圍為[-128,127]

注意:-128沒有原碼和反碼表示(shi)

文章來自個人專欄
文章 | 訂閱
0條評論
0 / 1000
請輸入你的評論
2
1