c語言無符號與有符號
A. 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,都不會做擴展。
B. C語言里區分有符號型和無符號型,兩者各有什麼用意
我簡單的解釋下,希望你聽明白。
一個數據在計算機中是按2進制存儲的,在計算機中就是8個0或1組成的,比如0,在計算機中就是
00000000。這種數字的第一位是標示符號的,如果是0就是正數,如果是1就是負數。
如果是無符號型的數據,第一位就會默認為0,並且不能更改。有符號則沒有嚴格限定。
這樣造成的結果就是無符號型的數據會在有符號型數據的基礎上在正數部分增加一半的取值范圍。
C. C語言中有符號和無符號是什麼意思解釋一下
有稱號數是負數、0和正數集,無符號數是0和正數集。
D. 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會隱含地將有符號參數強制轉換為無符號數,並假設這兩個數都是非負的,來執行這個運算。
E. c語言中整型數據中,有符號與無符號是什麼意思,能舉例說明下么
有符號就是可以表達負數有符號位
無符號就是不能表示負數沒有符號位
如基本整型 (int) 數的范圍為-2 147 483 648~2 147 483 647 即-2^31~(2^31-1)
無符號整型(unsigned int) 數的范圍為0~4 294 967 295 即0~(2^32-1)
通俗一點就是輸出一個可以輸出負數一個不行
望採納,謝謝
F. C語言中有符號整型和無符號整型的區別
有符號:用最高為來表示符號位 , 1表示負,0表示正
無符號:全部用來表示實際數。
兩者的取值范圍不同
有符號整型為 -32768 到 32767
無符號整型 為 0 到 65535
G. C語言有符號和無符號的有什麼不同啊
比如說整型變數吧。unsigned int 是從0到2的32次方減1,而signed int 是從負2的31次方到正2的31次方減1.
在計算機里,整型變數佔用4位元組,也就是32位的存儲空間。對於有符號數來說,正負號要單獨佔一位。所以除去符號位以外,數的絕對值就佔31位。這就是有符號和無符號的區別。
H. C語言中無符號整型變數和有符號整型變數指什麼
C語言中無符號整型變數和有符號整型變數在同一系統中所佔用的數據寬度一樣.
不同的是:
有符號整型變數把數據的最高位作為符號位使用,
因此能表示數的正負,
表示範圍:
對於16位的變數為:
-32368<=變數<=32367,
對於32位的變數為:-2147483648<=變數<=2147483647;
無符號整型變數把數據的最高位仍作為數據位使用,
因此不能表示負數,
表示範圍:
對於16位的變數為:
0<=變數<=65535,
對於32位的變數為:
0<=變數<=429467295
;
I. c語言中無符號的數與有符號的有什麼區別如題 謝謝了
表示範圍不相同 無符的最高位是用來表示數值的,有符的是用來表示符號的(1表示負數,0表示正數) 例如1001 無符:9 有符:-6
J. c語言:無符號和有符號是什麼東東
無符號就是沒有負數,只有0和正數
有符號是正數、0、負數都有