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毫米。這是一張機械加工的圖紙一部分,這個圖示代表什麼意思?感謝?大神賜教!...