c語言無符號和有符號
『壹』 c語言 關於有符號、無符號和補碼、原碼
在C語言中:只有十進制數有符號,八進制和十六進制沒有的,一個數的原碼是其二進制數,補碼是對原碼取反後再加上1,
比如: 5則原碼是 101,則反碼是010,補碼=010+1=011
『貳』 關於C語言中有符號型signed和無符號型unsigned的區別
C語言中有符號型signed和無符號型unsigned的區別為:符號位不同、正數范圍不同、轉換不同。
一、符號位不同
1、有符號型signed:有符號型signed由於有符號位,故能表示負數。
2、無符號型unsigned:無符號型unsigned由於省去了符號位,故不能表示負數。
二、正數范圍不同
1、有符號型signed:表示同一數字類型,有符號型signed由於有符號位,正數范圍比無符號型unsigned小。
2、無符號型unsigned:表示同一數字類型,無符號型unsigned由於省去了符號位,正數范圍比無符號型unsigned大。
三、轉換不同
1、有符號型signed:正數有符號型signed能轉換為無符號型unsigned,負數有符號型signed不能轉換為無符號型unsigned。
2、無符號型unsigned:無符號型unsigned能轉換為有符號型unsigned。
『叄』 C語言中無符號整型變數和有符號整型變數指什麼
C語言中無符號整型變數和有符號整型變數在同一系統中所佔用的數據寬度一樣.
不同的是:
有符號整型變數把數據的最高位作為符號位使用,
因此能表示數的正負,
表示範圍:
對於16位的變數為:
-32368<=變數<=32367,
對於32位的變數為:-2147483648<=變數<=2147483647;
無符號整型變數把數據的最高位仍作為數據位使用,
因此不能表示負數,
表示範圍:
對於16位的變數為:
0<=變數<=65535,
對於32位的變數為:
0<=變數<=429467295
;
『肆』 C語言中char類型中的有符號與無符號的區別和意義
在C中,默認的基礎數據類型均為signed,現在我們以char為例,說明(signed)
char與unsigned
char之間的區別。首先在內存中,char與unsigned
char沒有什麼不同,都是一個位元組,唯一的區別是,char的最高位為符號位,因此char能表示-127~127,unsigned
char沒有符號位,因此能表示0~255,這個好理解,8個bit,最多256種情況,因此無論如何都能表示256個數字。在實際使用過程種有什麼區別呢?主要是符號位,但是在普通的賦值,讀寫文件和網路位元組流都沒什麼區別,反正就是一個位元組,不管最高位是什麼,最終的讀取結果都一樣,只是你怎麼理解最高位而已,在屏幕上面的顯示可能不一樣。
二者的最大區別是:但是我們卻發現在表示byte時,都用unsigned
char,這是為什麼呢?首先我們通常意義上理解,byte沒有什麼符號位之說,更重要的是如果將byte的值賦給int,long等數據類型時,系統會做一些額外的工作。如果是char,那麼系統認為最高位是符號位,而int可能是16或者32位,那麼會對最高位進行擴展(注意,賦給unsigned
int也會擴展)而如果是unsigned
char,那麼不會擴展。最高位若為0時,二者沒有區別,若為1時,則有區別了。同理可以推導到其它的類型,比如short,
unsigned
short,等等。
具體可以通過下面的小例子看看其區別
include
<stdio.h>
void
f(unsigned
char
v)
{
char
c
=
v;
unsigned
char
uc
=
v;
unsigned
int
a
=
c,
b
=
uc;
int
i
=
c,
j
=
uc;
printf("----------------
");
printf("%%c:
%c,
%c
",
c,
uc);
printf("%%X:
%X,
%X
",
c,
uc);
printf("%%u:
%u,
%u
",
a,
b);
printf("%%d:
%d,
%d
",
i,
j);
}
int
main(int
argc,
char
*argv[])
{
f(0x80);
f(0x7F);
return
0;
}
結果輸出如下:結果分析:
對於(signed)char來說,0x80用二進製表示為1000
0000,當它作為char賦值給unsigned
int或
int
時,系統認為最高位是符號位,會對最高位進行擴展。而0x7F用二進製表示為0111
1111,最高位為0,不會擴展。
對於unsigned
char來說,不管最高位是0,還是1,都不會做擴展。
『伍』 C語言中有符號整型和無符號整型的區別
有符號:用最高為來表示符號位 , 1表示負,0表示正
無符號:全部用來表示實際數。
兩者的取值范圍不同
有符號整型為 -32768 到 32767
無符號整型 為 0 到 65535
『陸』 C語言中的有符號和無符號是什麼意思給仔細講講
有符號數 有符號數的實例
有符號數是針對二進制來講的。 用最高位作為符號位,「0」代表「+」,「1」代表「-」;其餘數位用作數值位,代表數值。 有符號數的表示:計算機中的數據用二進製表示,數的符號也只能用0/1表示。一般用最高有效位(MBS)來表示數的符號,正數用0表示,負數用1表示。 有符號數的編碼方式,常用的是補碼,另外還有原碼和反碼等。用不同二進制編碼方式表示有符號數時,所得到的機器數可能不一樣,但是真值應該是相同的。
無符號數【網路.網路搜索】
無符號數是針對二進制來講的,無符號數的表數范圍是非負數。全部二進制均代表數值,沒有符號位。即第一個"0"或"1"不表示正負。 無符號數與有符號數相對
C支持所有整形數據類型的有符號數和無符號數運算。盡管C標准並沒有指定某種有符號數的表示,但是幾乎所有的機器都使用二進制補碼。通常,大多數數字默認都使有符號的,C也允許無符號數和有符號數之間的轉換,轉換原則是基本的位表示保持不變。因此在一台二進制補碼機器上,當從無符號數轉換為有符號數時,效果就是應用U2Tw,而從有符號轉換為無符號數時,就是應用函數T2Uw,其中w表示數據類型的位數。T2Uw(x) = (x<0)?(x+2w) :x;U2Rw(x) = (x<2w-1)?x:(x-2w); 當執行一個運算時,如果它的一個運算數是有符號的而另一個是無符號的,那麼C會隱含地將有符號參數強制轉換為無符號數,並假設這兩個數都是非負的,來執行這個運算。
『柒』 c語言中,int什麼意思,什麼是無符號/有符號整型
int 是整數類型,用於定義變數的類型,有符號,unsigned
int 是無符號的整數類型,直白點說有符號無符號整型就是能不能存放負數。
根據程序編譯器的不同,整形定義的位元組數不同。51類單片機的C語言中,int代表2個byte(16位);如果是32位ARM處理器的C語言中,則int代表4個byte(32位)。(如32位XP)把int定義為4
byte(32位)。 注意一下取值范圍。若在32位系統中,signed
int a, 則a范圍[-2^31 , 2^31 -1]
即 [-2147483648,2147483647]。
所以一個int定義需要注意幾個方面,一個是類型,一個是存儲數據的大小范圍。