看一個(gè)C語言的筆試題,題目很簡單,問char是有符號類型還是無符號類型?
看到這個(gè)題目的時(shí)候,我毫不猶豫的選擇了一個(gè)錯(cuò)誤答案。
在大部分人的認(rèn)知中,C語言數(shù)據(jù)類型前面的signed是可以省略的,比如:
int a;其實(shí)等價(jià)于:
signed int a;也就是 a 表示有符號整型。 如果想要定義無符號整型,可以寫成:
unsigned int a;前面的 unsigned 不能省略。
但是 char 類型卻除外。
寫個(gè)代碼測試一下,有符號 char 表示范圍 -128 - 127,無符號 char 表示范圍 0 - 255。
我們只要定義一個(gè) char 類型等于 127,讓他加一后,看結(jié)果大于 0 還是小于 0 就行。
先用 Ubuntu 里面的 gcc 來編譯,結(jié)果是有符號數(shù)。
換成 arm-linux-gcc,在ARM架構(gòu)的開發(fā)板上運(yùn)行,結(jié)果是無符號數(shù)。
最后再來看下C標(biāo)準(zhǔn),他把這種行為稱為:
implementation defined就是讓編譯器自己去決定,所以不同的環(huán)境下面,char表示的確實(shí)不一樣。
如果考慮到移植,一定要謹(jǐn)慎使用。
審核編輯:劉清
-
C語言
+關(guān)注
關(guān)注
180文章
7630瀏覽量
140330 -
ARM架構(gòu)
+關(guān)注
關(guān)注
15文章
181瀏覽量
36983 -
char
+關(guān)注
關(guān)注
0文章
11瀏覽量
3799 -
gcc編譯器
+關(guān)注
關(guān)注
0文章
78瀏覽量
3648
原文標(biāo)題:char屬于有符號還是無符號
文章出處:【微信號:學(xué)益得智能硬件,微信公眾號:學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
關(guān)于verilog中的無符號數(shù)和有符號數(shù)
跟著狄泰唐老師學(xué)C語言進(jìn)階教程的筆記之有符號與無符號
無符號類型與整數(shù)文字不匹配
雙狀態(tài)無符號/有符號數(shù)據(jù)類型
C語言單片機(jī)編程為什么總是用無符號的數(shù)據(jù)類型來定義
SpinalHDL的UInt與SInt數(shù)據(jù)類型能夠進(jìn)行有符號/無符號數(shù)操作
高效的C編程之變量類型

fpga 有符號數(shù)、無符號數(shù)

plc位、字節(jié)、字、雙字、有符號、無符號數(shù)據(jù)類型的關(guān)系

關(guān)于有符號數(shù)據(jù)類型的示例
匯編基礎(chǔ)知識(shí)教程之?dāng)?shù)據(jù)類型與寄存器

verilog中數(shù)據(jù)的符號屬性(有符號數(shù)和無符號數(shù))探究根源

原理圖符號引腳的電氣類型

評論