看一個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文章
7632瀏覽量
141808 -
ARM架構
+關注
關注
15文章
183瀏覽量
38207 -
char
+關注
關注
0文章
11瀏覽量
3821 -
gcc編譯器
+關注
關注
0文章
78瀏覽量
3754
原文標題:char屬于有符號還是無符號
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
熱點推薦
關于verilog中的無符號數和有符號數
在數字電路中,出于應用的需要,我們可以使用無符號數,即包括0及整數的集合;也可以使用有符號數,即包括0和正負數的集合。在更加復雜的系統中,也許這兩種
跟著狄泰唐老師學C語言進階教程的筆記之有符號與無符號
——> MIN_VALUEB. MIN_VALUE-1 ——> MAX_VALUE4. signed和unsignedl C語言中變量默認為有符號的類型l unsigned 關鍵字聲明為無
發表于 05-16 21:43
無符號類型與整數文字不匹配
什么嗎? case和if / elsif之間有區別嗎?signal rx_count:unsigned(15 downto 0);case rx_count是當15 =>- 這就產生了“無符號
發表于 03-05 12:53
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
plc位、字節、字、雙字、有符號、無符號數據類型的關系
plc位、字節、字、雙字、有符號、無符號的關系以下內容由深圳市綜科智控科技開發有限公司編輯整理 2021/08/18前言:很多同學在PLC開發過程中,因為數據
發表于 12-29 18:52
?2次下載

匯編基礎知識教程之數據類型與寄存器
數據類型
這是 ARM 匯編基礎知識系列教程的第二部分,涉及數據類型和寄存器。
與高級語言類似,ARM支持對不同數據類型的操作。我們可以加載(或存儲)的數據類型可以是

評論