看一個C語言的筆試題,題目很簡單,問char是有符號類型還是無符號類型?
看到這個題目的時候,我毫不猶豫的選擇了一個錯誤答案。
在大部分人的認知中,C語言數據類型前面的signed是可以省略的,比如:
int a;其實等價于:
signed int a;也就是 a 表示有符號整型。 如果想要定義無符號整型,可以寫成:
unsigned int a;前面的 unsigned 不能省略。
但是 char 類型卻除外。
寫個代碼測試一下,有符號 char 表示范圍 -128 - 127,無符號 char 表示范圍 0 - 255。
我們只要定義一個 char 類型等于 127,讓他加一后,看結果大于 0 還是小于 0 就行。
先用 Ubuntu 里面的 gcc 來編譯,結果是有符號數。
換成 arm-linux-gcc,在ARM架構的開發板上運行,結果是無符號數。
最后再來看下C標準,他把這種行為稱為:
implementation defined就是讓編譯器自己去決定,所以不同的環境下面,char表示的確實不一樣。
如果考慮到移植,一定要謹慎使用。
審核編輯:劉清
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
C語言
+關注
關注
180文章
7542瀏覽量
131037 -
ARM架構
+關注
關注
14文章
168瀏覽量
36021 -
char
+關注
關注
0文章
11瀏覽量
3551 -
gcc編譯器
+關注
關注
0文章
78瀏覽量
3247
原文標題:char屬于有符號還是無符號
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
有符號數,無符號數,浮點數探討
本帖最后由 hq1987 于 2015-4-29 11:52 編輯
對于無符號數大家都基本理解,我主要說說有符號數,浮點數在機器世界里到底是怎么表示的。1、
發表于 04-29 10:15
跟著狄泰唐老師學C語言進階教程的筆記之有符號與無符號
——> MIN_VALUEB. MIN_VALUE-1 ——> MAX_VALUE4. signed和unsignedl C語言中變量默認為有符號的類型l unsigned 關鍵字聲明為無
發表于 05-16 21:43
DSP指令——有符號32位飽和為無符號8位
hi,everyone:
我做優化時候,需要將一個有符號的32位 ?int 類型的數,做一個飽和操作,變成一個
無符號的8位的數。具體代碼如
發表于 06-21 02:36
帶有無符號字符的隱式類型轉換
大家好,我正在寫一個需要使用無符號字符的程序。但是,每當我使用一個算術運算符或位運算符時,總是會得到“隱式簽名到無符號轉換”警告。結果是,在沒有警告的情況下生成以下內容:例如:
發表于 10-25 16:53
無符號類型與整數文字不匹配
什么嗎? case和if / elsif之間有區別嗎?signal rx_count:unsigned(15 downto 0);case rx_count是當15 =>- 這就產生了“無符號
發表于 03-05 12:53
1.2FreeRTOS中的數據類型
數。 如果 BaseType_t 被定義成了 char 型,要特別 注意將其設置為有符號數,因為部分函數的返回值是用負數來表示錯誤類型。UBaseType_t這個數據
發表于 07-22 23:27
C語言單片機編程為什么總是用無符號的數據類型來定義
注意:答案和題目均轉自百度知道char型可以表示數的范圍是-128到127,所占位數是8位int型可以表示數的范圍是-32768到32767,所占位數是16位假如用有符號的數據類型表示
發表于 07-01 08:07
SpinalHDL的UInt與SInt數據類型能夠進行有符號/無符號數操作
在Bits的基礎上,SpinalHDL提供了UInt、SInt數據類型,從而能夠進行有符號/無符號數操作。變量定義/初始化UInt/SInt
發表于 07-14 14:45
評論