嵌入式C語言取值範圍問題

2021-10-24 03:56:16 字數 992 閱讀 4234

c語言高階

主要以嵌入式常考題char型資料為例

char所佔空間為1個位元組,即8個bit位,當定義為有符號char時(系統預設為有符號數),其取值範圍為-128~127,因為最大值為正數,必須保證符號位為0,0111 1111 表示為+127;負數時最高位符號位為1,

1000 0000 代表-128。

事實上計算機是用補碼的形式來存放整數的值,其中正數的補碼是該數的二進位制形式,而負數的補碼需要通過以下幾步獲得:

(1) 先取得該數的絕對值的二進位制形式,符號位置為1;

(2) 符號位不變,將第1步的值按位取反(即將 0 都變為 1,1 都變為 0);

(3) 符號位不變,最後將第2步的值加1。

如下圖為正數 7 和負數 -7 的補碼表示:

當存在有符號型別和無符號型別時,所有的操作都自動轉換為無符號型別。

如下圖常見嵌入式考題

void

foo(

void

)

此時-20變成乙個非常大的正整數,所以該表示式計算結果大於6,這一點對於應當頻繁用到無符號資料型別的嵌入式系統來說是非常重要的。這也是所謂的 a + b > 0並不一定等價於 a > b;

下面是**和輸出

當超出最大範圍時,會出現輸出不是理想結果,但是嵌入式筆試中常會利用此來變相考大家理解的深不深,

**中128超出最大範圍,即為127+1二進位制表示為0111 1111 +1,為1000 0000,故對應著-128,總結規律就是

當資料n大於127時候,輸出為-128+(n-127-1);

嵌入式學習(二) 嵌入式系統C 語言

1 從 cpu 復位時的指定位址開始執行 2 跳轉至彙編 startup 處執行 3 跳轉至使用者主程式 main 執行,在 main 中完成 a.初試化各硬體裝置 b.初始化各軟體模組 c.進入死迴圈 無限迴圈 d呼叫各模組的處理函式 下面是幾個 著名 的死迴圈 1 作業系統是死迴圈 2 win3...

C語言 取值範圍

列印型別 u8 ds8 du16 d or hu s16 d or hd u32 us32 du64 llu s64 lld int dunsigned int ushort int d or hd long ldunsigned long lulong long lld unsigned long...

嵌入式C語言總結

這幾天花了兩天時間看了一些嵌入式c語言方面的內容,以下是一些讀書筆記,記錄一下。1 不能有返回值 2 不能向isr 傳遞引數 3 isr盡可能的短 4 printf有重入問題 1 中斷服務程式isr 2 硬體初始化 1 某io 晶元被定為在 cpu的儲存空間而非 io空間,而且暫存器對應於某特定位址...