c++编程之数据类型

       C++定义了表示整数、浮点数、字符和布尔值以及void的基本数据类型,算术类型的存储空间与机器有关,因为机器位数不同,这些类型所能表示的最大(最小)值也因机器的不同而有所不同。


类型+含义+最小存储空间如下:
  bool   布尔型

       char   字符型  8位

  wchar_t  宽字符型  16位

  short  短整型  16位

  int   整  16位

       long  长整  32位

  float  单精度浮点型  6为有效数字

  double  双精度浮点型  16位有效数字

  long double  扩展精度浮点型  16位有效数字


具体分析如下:
1、整数

一般认为short ,int  ,long为表示整数的类型;一般,short类型为半个机器字长int类型为一个机器字长,而long类型定义为不小于int类型,long long类型为8个字节

使用sizeof来看一下他们的结果:

cout << sizeof(short) << endl;
cout << sizeof(int) << endl;
cout << sizeof(long) << endl;
cout << sizeof(long long) << endl;
在当前电脑编译器下为: 2,4,4,8

因此,在当前编译器下,使用int和long是没有区别的。在使用时尽可能使用最合适的类型,short的使用可以减少存储空间,int的使用可以加快程序处理速度(一个机器字长),long long的使用是在int范围不足以表示时使用


unsigned int与int——在一起操作时,都会转换为无符号数,如下:

	unsigned int a = 100;
	signed int b = -130;
	
	if (a < b)
		printf("%u", b);

输出为: 4294967166    。在运算中,无符号数优先级要高于有符号数。


2、浮点数

浮点数常用的为 float,double与long double;具体使用需要根据编译器处理结果而定。

使用sizeof来看一下他们的结果:

cout << sizeof(float) << endl;
cout << sizeof(double) << endl;
cout << sizeof(long double) << endl;
在当前电脑编译器下为: 4,8,8
float与double的区别在于精度的不同,double精度高,有效位为16位,float精度为7位。

例如,在如下的example中的输出:

float l1 = 100.22222222222;
double l2 = 100.222222222222;

printf("%0.11f\n", l1);//输出为100.22222137451
printf("%0.11f\n", l2);//输出为100.22222222222
在高位机的某些处理器中, long double的大小可能为16字节,这个时候使用long double将得到更准确的精度。

在程序中,精度越高,处理器处理数据花费时间越多,程序执行速度越慢。

3、字符

字符有 char、wchar_t、char16_t、char32_t ;这些类型与字符集有关系,涉及unicode,utf-8,utf-16等,可通过一下链接来了解字符的出现及意义:

@于洋的经典论述  ————讲述了什么是字符集以及字符集是如何出现的,使用字符集的必要性

4、bool值

判断true与false的类型,可以认为ture就是1,false就是0.

cout << false << endl;	//输出为0
cout << true << endl;	//输出为1

5、void类型

void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。

使用void的意义在于:对函数返回的限定;对函数参数的限定

1、对于有些编辑器来说,不定义函数返回值是可编译的。使用void可增强代码的严谨性与可读性

test(){
        int a=10;
	return a;
}

在某些编译器下是可编译的... ... ;而 test(2)在某些编译器下是可执行的。 因此 int test(void) 的定义是必要的

2、注意void指针

按照ANSI标准,不能对void指针进行算法操作,即void * pvoid; pvoid++;是不合法的。

但是GNU标准则不一样,它指定void *的算法操作与char *一致。因此,使用 void *pvoid;(char*)pvoid++来实现兼容是必要的


void在c语言库中的经典使用:

void *memcpy(void *dest, const void *src, size_t n); //内存复制函数

任何类型的指针都可以传入memcpy中,而memcpy只是负责把src那一块的存储复制到dest区域中,复制本身与数据类型无关







猜你喜欢

转载自blog.csdn.net/ly601579033/article/details/52368160