C/C++ 深入了解数据类型

说明:测试用例如若未说明则均用DEV5.11测试
文章来源均为自己测试总结,以实用为主,参考了众多博客
文章写的只是自己怕忘了又要测试的知识点;不对的地方还望指正

预定义数据类型

int:4个字节,一个字节8位,4*8=32; 所以取值范围为:-231——231-1=-2,147,483,648——2,147,483,647 ;
char;double;bool;float;void;指针型;

类型修饰符

unsigned,signed, short, long

总计(dev 5.11测试):

{ short int (2字节) = short; 
  long int (4字节) = long = int;
  long long int (8字节) = long long;double (8字节); 
  long double(16字节);(这些都有 unsigned和 signed 的区别) };
  float (4字节);char (1字节);

long >= int >= short 1

float 和 double 都用数符,尾数,指数符,指数四部分表示(示例:-3.4*10(-38);数符:第一个负号;尾数:3.4;指数符:括号内的负号;指数38);
float、double、long double、的范围网上有,但是我无法测试,所以我不能肯定,在这就不列出了。

测试:

#include<stdio.h>
#include <iomanip>
#include<iostream>
using namespace std;
int main()
{     
double D=1234567890.1234567890;      
long double LD=12345.1234567890098;      
float F=1.23456789;      
cout<<"D:"<<setprecision(18)<<D<<endl;      
cout<<"LD:"<<setprecision(18)<<LD<<endl;      
cout<<"F:"<<setprecision(9)<<F<<endl;
return 0;
}

/*
DEV 5.11显示:
D:1234567890.12345672
LD:12345.1234567890097
F:1.23456788

VS2015显示:
D:1234567890.12345672
LD:12345.1234567890097
F:1.23456788
*/

所有的最后一位是随机的而且看来随机数种子都一样,所以十进制精度分别是double:17位;long double: 17位;float: 9位;
如果用十进制最大的数9做测试才在使用是最可靠,所以测试:

#include<stdio.h>
#include<time.h>
#include <iomanip>
#include<iostream>
using namespace std;
int main()
{      
double D=-9999999999.999999;      
long double LD=-99999.99999999999;      
float F=-9.999999;      
cout<<"D:"<<setprecision(18)<<D<<endl;      
cout<<"LD:"<<setprecision(18)<<LD<<endl;      
cout<<"F:"<<setprecision(9)<<F<<endl;
return 0;
}

/*
DEV 5.11显示:
D:-9999999999.99999809
LD:-99999.9999999999854
F:-9.99999905

可以观察到精确到的位数分别是:double:15位;long double 相同;float:7位;所以在这个范围内使用对应数据类型是ok的。

特殊的是:long double占内存16字节;double占内存8字节;精度却一样。

占位符总结:

	%d:int     
	%ld:long     
	%f:float    
	%lf:double
	%p:输出变量地址
	%x/%X:输出十六进制数    
	%s:输出字符串
	%o:无符号八进制整数
	%u:无符号十进制整数    
	%e/%E:用科学记数法输出浮点数

自定义数据类型

数组;结构体(struct);类(class)
联合体(union):联合体与结构体有一些相似之处。但两者有本质上的不同。在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在联合体中,各成员共享一段内存空间, 一个联合变量的长度等于各成员中最长的长度。

应该说明的是, 这里所谓的共享不是指把多个成员同时装入一个联合变量内, 而是指该联合变量可被赋予任一成员值,但每次只能赋一种值。

联合体的申明

   1.union perdata
   {
      int class;
      char officae[10];
   };
   perdata a,b; 
   2.union perdata
   {
   int class;
   char office[10];
   }a,b;
    3.union
    {
    int class;
    char office[10];
    }a,b

测例:

int main()
{
       union ch{
              int A;
              char Z;
       }a,b;
       a.A='A';
       b.Z='Z';
       cout<<"a.A:"<<a.A<<endl;
       cout<<"b.Z:"<<b.Z<<endl;
       cout<<"a.Z:"<<a.Z<<endl;
       cout<<"b.A:"<<b.A<<endl;
       return 0;
}

/*
输出结果: 
a.A:65                   整型 A 
b.Z:Z                     char型 Z 
a.Z:A                     char型 A 
b.A:90                   整型 Z 
说明:赋值的时候已经确定值了,在使用同一个对象的不同的数据类型的时候,数据值不变,但还会改变数据类型。 
*/

联合体就相当于一个可变的数据类型。

枚举(enum):C/C++语言可以使用#define和const创建符号常量,而使用enum工具不仅能够创建符号常量,还能定义新的数据类型,但是必须按照一定的规则进行。
例:

enum enumType {Monday, Tuesday, Wednesday, Thursday, Friday,Saturday, Sunday};

未定义枚举量的值的默认是从0开始递增,若定义

enum enumType {Monday = 1, Tuesday, Wednesday = 1, Thursday, Friday,Saturday, Sunday};

则Monday = 1, Tuesday = 2, Wednesday =1, Thursday = 2, Friday = 3, Saturday = 4, Sunday = 5

测试:

int main()
{
       enum enumType { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };
       enumType Weekday;
       cout<<Monday<<Tuesday<< Wednesday<< Thursday<< Friday<<Saturday<< Sunday<<endl;
//     Monday = 1;         错误,不能赋值,    所以 Monday++ 也不可以了; 
       cout<<enumType(0)<<enumType(1)<<enumType(2)<<enumType(3)<<enumType(4)<<enumType(5)<<enumType(6)<<endl; 
       int a = Monday + 1;
       if (Monday == 0)
       cout<<"Monday:"<<Monday<<endl;
//     Monday = Wednesday;       错误,不能赋值; 
       cout<<"a:"<<a<<endl;
//     enum Week{Monday = 1, Tuesday, Wednesday = 1, Thursday, Friday, Saturday, Sunday};            错误,不能重复定义里面的每一元 
       return 0;
}

/*
输出结果: 
0123456
0123456
Monday: 0
a: 1
*/

  1. C标准规定,并没有做具体规定,具体实现根据编译器可能不同 ↩︎

发布了3 篇原创文章 · 获赞 3 · 访问量 152

猜你喜欢

转载自blog.csdn.net/weixin_44223946/article/details/104181557
今日推荐