C語言基礎:printf列印基本資料型別彙總
阿新 • • 發佈:2019-01-10
注意的是:/// data type unsigned char, data length 1 byte typedef unsigned char MS_U8; // 1 byte /// data type unsigned short, data length 2 byte typedef unsigned short MS_U16; // 2 bytes /// data type unsigned int, data length 4 byte typedef unsigned long MS_U32; // 4 bytes /// data type unsigned int, data length 8 byte typedef unsigned long long MS_U64; // 8 bytes /// data type signed char, data length 1 byte typedef signed char MS_S8; // 1 byte /// data type signed short, data length 2 byte typedef signed short MS_S16; // 2 bytes /// data type signed int, data length 4 byte typedef signed long MS_S32; // 4 bytes /// data type signed int, data length 8 byte typedef signed long long MS_S64; // 8 bytes /// data type float, data length 4 byte typedef float MS_FLOAT; // 4 bytes /// data type null pointer #ifdef NULL #undef NULL #endif #define NULL 0 /// data type hardware physical address typedef unsigned long MS_PHYADDR; // 32bit physical address
java中的char佔2個位元組 ,而C中char佔用1個位元組 1:“位元組”是byte,“位”是bit ; 2: 1 byte = 8 bit ;上面程式碼中SM_UX,X代表的是bit,比如U16 為2 byte=2*8bit 。
datatype.h中:
結合上面的內容,你理解這兩個是什麼意思了嗎?/// Data type unsigned char typedef unsigned char UCHAR; /// Data type unsigned char typedef unsigned char BYTE; /// Data type unsigned int typedef unsigned int UINT; /// Data type unsigned int typedef unsigned short WORD; // 16bit /// Data type unsigned long typedef unsigned long ULONG; /// Data type unsigned long typedef unsigned long DWORD; #ifndef NULL #define NULL (void *)0 #endif typedef U8 BOOLEAN; ///< BOOLEAN #define BOOL BOOLEAN
BOOLEAN bFav = FALSE;
WORD wPosition = 0xFFFF;
答案是:
typedef unsigned short WORD; // 16bit 相當於MS_U16 2byte
typedef U8 BOOLEAN; ///< BOOLEAN 1byte char
C語言中沒有java的String 型別,那程式是怎樣把文字(包括中文),打印出來的
中文的unicode是以U16存在的,NOS專案用U16型別指標表示。比如這個(U16*)str、查了一下網上也有用char *p = "ddddd";接著我們瞭解一下指標的定義,借用了網上的資料,其中andy是指標型別變數:
看懂上圖就知道,什麼時候傳遞的是指標的具體數值,什麼時候傳遞的是指標的位置地址。我們再回歸正題:我們C語言沒有Java中的string型別,它是怎麼將中文字元輸出來的?其實就是將指標所代表的值,如上面的25,重新複製到一個新的地址裡面去,和Java的StringBuffer異曲同工,都是往之前的文字後面追加文字。如下:
2.printf幾種常用的列印
public class TestPrintf{
public static void main(String[] args)
{
//定義一些變數,用來格式化輸出。
double d = 345.678;
String s = "你好!";
int i = 1234;
//"%"表示進行格式化輸出,"%"之後的內容為格式的定義。
System.out.printf("%f",d);//"f"表示格式化輸出浮點數。
System.out.println();
System.out.printf("%9.2f",d);//"9.2"中的9表示輸出的長度,2表示小數點後的位數。
System.out.println();
System.out.printf("%+9.2f",d);//"+"表示輸出的數帶正負號。
System.out.println();
System.out.printf("%-9.4f",d);//"-"表示輸出的數左對齊(預設為右對齊)。
System.out.println();
System.out.printf("%+-9.3f",d);//"+-"表示輸出的數帶正負號且左對齊。
System.out.println();
System.out.printf("%d",i);//"d"表示輸出十進位制整數。
System.out.println();
System.out.printf("%o",i);//"o"表示輸出八進位制整數。
System.out.println();
System.out.printf("%x",i);//"x"表示輸出十六進位制整數。
System.out.println();
System.out.printf("%#x",i);//"#x"表示輸出帶有十六進位制標誌的整數。
System.out.println();
System.out.printf("%s",s);//"s"表示輸出字串。
System.out.println();
System.out.printf("輸出一個浮點數:%f,一個整數:%d,一個字串:%s",d,i,s);
//可以輸出多個變數,注意順序。
System.out.println();
System.out.printf("字串:%2$s,%1$d的十六進位制數:%1$#x",i,s);
//"X$"表示第幾個變數。
}
}