1. 程式人生 > >C語言基礎:printf列印基本資料型別彙總

C語言基礎:printf列印基本資料型別彙總

/// 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$"表示第幾個變數。
}
}