天天看點

CC2530/IAR For 8051,資料格式/數值範圍問題

一般來說:

8位無符号整型: typedef unsigned char u8;

16位無符号整型:typedef unsigned short u16;

32位無符号整型:typedef unsigned int u32;

64位無符号整型:typedef unsigned long u64;

8位有符号整型: typedef signed char u8;

16位無符号整型:typedef signed short u16;

正常u16的範圍為:0-65536;

u32的範圍為:0-2^32,數值很大,我也不知道是多少;

u64的範圍為:0-2^64,基本是無限大,正常資料都到不了這麼大;

但是對于IAR for 8051來說:

u16:0-32768;

u32:0-65536;

u64:0-2^32;

是以,平常我們在其它編譯器裡面用不到的u64在這個編譯器裡會經常使用了,因為u32實在太小了

注意,如果你把一個u32的變量A指派為65533(未超出),然後把它列印出來,你會發現并不是65533,但是你把這個變量除以100再指派給變量B,再把B列印出來你會發現B是655,說明A的值是沒錯的,錯應該錯在printf函數上了;

還有,你如果把A指派成 -8263,再把它列印出來,你會發現就是 -8263,但是你把它除以100再指派給B再列印出來發現并不是-82,說明u32并不是包含有符号,而是printf造成的假象;

另外,你如果把u64的變量C指派成10000000(未超出範圍),再列印的時候就需要用%ld而不是%d了,因為u64的定義是unsigned long(無符号長整型);

對于s8和s16暫未測試其範圍,有興趣的可以自己試試。

繼續閱讀