C语言基础:printf打印基本数据类型汇总

1.基本数据类型

U8,U16,U32,U64等是什么类型

转自http://www.cnblogs.com/chenyebin/archive/2011/07/12/2103962.html

#define U32 unsigned int 
#define U16 unsigned short 
#define S32 int 
#define S16 short int 
#define U8  unsigned char 
#define    S8  char
unsigned无符号带U,比如U16,无符号short类型。signed有符号带S,比如S16 有符号short类型。
具体用到的NOS项目上时数据类型变形为如下:
/// 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几种常用的打印

转自:http://dingbuoyi.iteye.com/blog/816598

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$"表示第几个变量。
}
}


  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值