ARM下char型別符號問題

2021-07-28 23:59:04 字數 490 閱讀 1187

最近在專案中遇到問題,在x86平台下除錯好的程式,移植到arm上,程式行為完全變了。

示例如下:

#include 

#include

int main(int argc, char *argv)

else

return

0;}

在x86平台輸出smaller than 128。

在arm平台輸出bigger than 128。

原來,c標準表示char型別可以帶符號也可以不帶符號,由具體的編譯器、處理器或由它們兩者共同決定到底char是帶符號合適還是不帶符號合適。

大部分體系結構上,char預設是帶符號的,它可以自-128到127之間取值。而也有一些例外,比如arm體系結構上,char預設就是不帶符號的,它的取值範圍是0~255。

可以在編譯的時候通過-funsigned-char 和-fsigned-char 指定char是無符號還是有符號的。

char的有無符號型別

char 分為有符號性 signed 和無符號型 unsigned 兩種 若是signed型,就意味著取值範圍為 128,127 若是unsigned型,就意味著取值範圍為 0,255 c語言中我們通常直接用型別char,但是它究竟是被當做signed型還是unsigned型,由編譯器決定。c語言允...

char 型別 127 1 128問題

最近準備面試,發現應屆生考的比較多的就是基礎,我面向c c 則做到的筆試題也有很多相關的題,其中就有charl型別變數a 127 a 1 的問題,這裡記錄一下自己的理解 我們知道char型別儲存的值的範圍是 128 127,127為正數的最大,再進行加一就會產生溢位操作 計算機內部計算都是使用的二進...

java環境下char型別轉為int型別

char型別轉換為int型別 char a 1 int b int a 此時,輸出b得到的是字元 1 的ascii編碼49,其他數字甚至是字母也一樣,按此類方法輸出的都只會是ascii編碼,當然如果不強制型別轉換,直接寫作 int b a 編譯也不會出錯,不過輸出的依舊是ascii編碼。如果想直接輸...