char 其數值表示 範圍的計算

2023-03-14 06:41:52 字數 6089 閱讀 5793

1樓:杞霞野午

按八位來算:

在計算機裡面是用補碼錶示的,128的二進位制碼是:10000000,這個東西在計算裡面並不是128,因為最高位是符號,它是個負數,那麼負數的原碼是多少呢,我們知道如果補碼的符號位為「1」,表示是一個負數,求原碼的操作可以是:符號位為1,其餘各位取反,然後再整個數加1。

所以,10000000取反後就是11111111,把符號位去了就是01111111再加1就是10000000就是-128了。

其實你看-127是10000001,這個很好理解,-128加1不就是-127

在c/c++中,char是c/c++整型資料中比較古怪的一個,

而且關於char還有一個特殊的語言就是char

*,它在c/c++中有專門的語義,既不同於signed

char

*,也不同於unsigned

char

*,專門用於指以'\0'為結束的字串

c語言是弱型別還沒什麼,如果在c++中,你可以試一試

char *p="abcd";

是可以通過編譯的但如果用

signed char *p="abcd";

還是unsigned char *p="abcd";

都是不能通過編譯的。

關於這些在c/c++的語言標準或一些經典書籍如thec++programing

language中都有很清楚的說明。

判斷編譯器的預設char符號

#include

int main(void)

else

return 0;

}char 還在pascal語言中應用。在pascal語言中,字元常量是由單個字元組成,所有字元采用ascii編碼也稱ascii碼

2樓:商恆奚雪

這是因為採用的是補碼儲存的,+0,-0的補碼相同,所以可以多表示一個數。最高位是符號位表示正負

1為負,0為正,後面是補碼...

3樓:沙裡波特

char,是為字元型,資料長度為8位二進位制數。

其數值表示範圍的計算?其數值表示範圍,有相關的定義,並不需要計算。

誰給你出的這種題?抽他!

4樓:塗墨徹粟嬋

char為字元型資料(資料長度為8位二進位制數),也可參與整數運算,計算機的有符號數(整型數)是以補碼形式表示的。

對於8位二進位制數表示的補碼,最高位符號位,其餘數值位,如(+8)的補碼=0000

1000

(-8)的補碼=1111

1000

//方法是:+8的原碼求反加1

所以,最大正數表示為:0111

1111,即2^7-1

最小負數表示為:1000

0000,即-2^7

char取值範圍

5樓:匿名使用者

1、char取值範圍是 -128~+127。

2、我們先來看 signed char的最大值。  最高位是 符號位, 0 代表正數; 1 代表負數。0 1 1 1  1 1 1 1     這個值等於 2^0 + 2^1 + 2^2  + 2^3  + 2^4  + 2^5  + 2^6  = 127  。

也有一個簡便計算方法:2^7 -1 = 128-1 =127   所以,signed char 的最大值是 127 。

singed char 的最小值計算。 在計算機中,數值是以補碼形式儲存的。正數的補碼是其本身; 而負數的補碼是 取反 (符號位保持不變),再加1。

我們先來看 -1 的儲存過程:

-1: 1 0 0 0 0 0 0 1 ->(取反) 1 1 1 1 1 1 1 0 ->(加1) 1 1 1 1 1 1 1 1

-2: 1 0 0 0 0 0 1 0 ->(取反) 1 1 1 1 1 1 0 1 ->(加1) 1 1 1 1 1 1 1 0

-3: 1 0 0 0 0 0 1 1 ->(取反) 1 1 1 1 1 1 0 0 ->(加1) 1 1 1 1 1 1 0 1

-127 1 1 1 1 1 1 1 1 ->(取反) 1 0 0 0 0 0 0 0 ->(加1) 1 0 0 0 0 0 0 1

-128 1 0 0 0 0 0 0 0 ->(取反) 1 1 1 1 1 1 1 1 ->(加1) 1 0 0 0 0 0 0 0

不管是原碼還是補碼, 總會出現 -0 這個值。 本來 +0 與 -0 是沒有區別的。 但對於儲存器和編譯器來講,總得充分利用每個位元組吧, 更不想出現二義性。

所以,將 -0 表示為 -128 , 這樣既增大了signed char 數值的表示範圍,又消除了 -0 的二義性。

所以signed char的取值範圍是 -128~127。

擴充套件資料

在mysql中,欄位型別char是指:使用指定長度的固定長度表示的字串;比如char(8),則資料庫會使用固定的1個位元組(八位)來儲存資料,不足8位的字串在其後補空字元。

字元轉換

在excel中char函式用於返回對應發於數字**的字元。其用法:=char(number)

其中,引數number為轉換的字元**,介於0~255之間,char佔一個位元組,也就是8個二進位制位,但它表示的是有符號的型別,所以表示的範圍是-128~127;uchar表示無符號的型別,所以表示的範圍是0~255。

代數概念

char是characteristic的簡寫,表示一個環或者域的特徵,即最小的非負整數n,使ne=0。(e為單位元) 。

6樓:今年的冬天沒有下雪

對於多數編譯器而言(包括vc++),char 都視作 signed char來處理,這時 char 的取值範圍得與 二進位制編碼技術有關,對於補碼錶示法。

char 的取值範圍是 -128 - 127, 對於符號絕對值編碼法、反碼記法, char 的取值範圍是 -127 - 127。char 有 8 位,最高位是符號位,所以 char可以在 -127 - 127 取值是沒有疑問了。

當最高位是 1,其餘位都是 0 時,按照補碼錶示法的規則,這個數應該是 負數了,用求負數的二進位制的方法反推回去:

二進位制:    1000 0000

減一:         0111 1111

逐位取反:   1000 0000      //和原來的二進位制形式一樣,對應正整數 128

經過這一系列操作之後,二進位制形式依然是 1000 0000,對應 數值 128,但這個數是負數,因為反推前 最高位是 1 的,故對應 -128。

我們的機器多數是基於補碼錶示的

11111111   =   -1

10000000   =   -128

現在證明   10000000   表示的是   -128而不是-0

10000000   +   00000001   =   10000001   =   -127

顯然   -128   +   1   =   -127

11111111   符號位為1表示負數

將數值位按位取反加一得到

0000000+1   =   0000001

所以   11111111   =   -1

所以signed char的取值範圍是 -128~127。

擴充套件資料

char是c/c++整型資料中比較古怪的一個。

其它的如int/long/short等不指定signed/unsigned時都預設是signed,但char在標準中是unsigned,編譯器可以實現為帶符號的,也可以實現為不帶符號的,有些編譯器如psos的編譯器,還可以通過編譯開關來指定它是有符號數還是無符號數。

char是characteristic的簡寫,表示一個環或者域的特徵,即最小的非負整數n,使ne=0。(e為單位元) 。

7樓:e滾滾滾

1原碼:00000001

發現是負數做兩步:

1反碼:11111110

1補碼:11111111(-1)

計算機用負數的絕對值的補碼錶示這個負數

這樣既可以解釋-129了,如下:

129原碼:10000001

129反碼:01111110

129補碼:01111111(+127)

這樣也可以解釋char 範圍從-128~127

-128為什麼表示成10000000

128原碼:10000000

128反碼:01111111

128補碼:10000000(-128)

所以char 範圍是從-128~127

拓展資料:

在mysql中,欄位型別char是指:使用指定長度的固定長度表示的字串;比如char(8),則資料庫會使用固定的1個位元組(八位)來儲存資料,不足8位的字串在其後補空字元。

字元轉換

在excel中char函式用於返回對應發於數字**的字元。其用法:=char(number)

其中,引數number為轉換的字元**,介於0~255之間,char佔一個位元組,也就是8個二進位制位,但它表示的是有符號的型別,所以表示的範圍是-128~127;uchar表示無符號的型別,所以表示的範圍是0~255。

代數概念

char是characteristic的簡寫,表示一個環或者域的特徵,即最小的非負整數n,使ne=0。(e為單位元) 。

8樓:lnx的守望

1.char 是一個位元組型別。 由8位組成。

char 又分為 signed char (有符號型別) 和 unsigned char (無符號型別)。 通常,我們的理解是將char 作為 signed char 來處理。

2.我們先來看 signed char的最大值。  最高位是 符號位, 0 代表正數; 1 代表負數。

0 1 1 1  1 1 1 1     這個值等於 2^0 + 2^1 + 2^2  + 2^3  + 2^4  + 2^5  + 2^6  = 127  。 也有一個簡便計算方法:2^7 -1 = 128-1 =127   所以,signed char 的最大值是 127 。

這個容易理解。

3.接下來,看看 singed char 的 最小值 是如何計算的?需要明白一個概念, 在計算機中, 數值是以補碼形式儲存的。

正數的補碼是其本身; 而負數的補碼是 取反 (符號位保持不變),再加1。

4.我們先來看 -1 的儲存過程:

-1:     1 0 0 0  0  0  0  1    ->(取反) 1 1 1 1 1 1 1 0     ->(加1)  1 1 1 1 1 1 1 1

-2:  1 0 0 0  0  0  1  0    ->(取反) 1 1 1 1 1 1 0 1     ->(加1)  1 1 1 1 1 1 1 0

-3:  1 0 0 0  0  0  1  1    ->(取反) 1 1 1 1 1 1 0 0     ->(加1)  1 1 1 1 1 1 0 1

-127   1 1 1 1  1  1  1  1    ->(取反) 1 0 0 0 0 0 0 0     ->(加1)  1 0 0 0 0 0 0 1

-128   1 0 0 0  0  0  0  0    ->(取反) 1 1 1 1 1 1 1 1     ->(加1)   1 0 0 0  0  0  0  0

5.不管是原碼還是補碼, 總會出現  -0 這個值。 本來 +0 與 -0 是沒有區別的。

但對於儲存器和編譯器來講,總得充分利用每個位元組吧, 更不想出現二義性。 那麼,乾脆將 -0 表示為 -128 , 這樣一來,既增大了signed char 數值的表示範圍,又消除了 -0 的二義性,所以signed char的取值範圍是 -128~127。

拓展資料

char是c/c++整型資料中比較古怪的一個,其它的如int/long/short等不指定signed/unsigned時都預設是signed,但char在標準中是unsigned,編譯器可以實現為帶符號的,也可以實現為不帶符號的,有些編譯器如psos的編譯器,還可以通過編譯開關來指定它是有符號數還是無符號數。

char是characteristic的簡寫,表示一個環或者域的特徵,即最小的非負整數n,使ne=0。(e為單位元) 。

為什麼char型可以表示為什麼char型可以表示128?char型不是隻有8位二進位制嗎?

這個要從二進位制說起。8位二進位制可以表示從00000000到11111111之間的所有數字。對於無符號數來說,這8位最小可以表示0 對應二進位制的00000000 最大可以表示255 對應二進位制的11111111 而對於有符號數來說,第一位表示符號位 正或負 剩餘7位表示值,所以值最小可以取0 ...

int的數值轉char的指標,比如123轉char A

記憶體大小並未改變,只是讓char o 指標指向了int 型的低位。除錯是硬道理!程式 include int main int i 789 char o char i printf d,c n i,o return 0 除錯結果 123是數值還是地址!想轉成串 char b 50 a b itoa...

機械加工圖的表示方法圖中紅圈的數值表示什麼?這是管道加

左邊的是圓角 直徑12.76 右邊的是粗糙度1.6 m,平面度0.15mm 二樓基本正確,但r12.75的意思是半徑12.75的圓弧,右上角是粗糙度等級,菱形的是平面度。左上角的是焊接符號,右下角是弧形構件的曲率半徑為12.5毫米。這是一張機械加工的圖紙一部分,這個圖示代表什麼意思?感謝?大神賜教!...