c++编程之数据类型

原创 2016年08月30日 14:55:58

       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区域中,复制本身与数据类型无关







编程之禅 浅谈封装

作为一个整天与代码打交道的人,你真的会coding吗? 今天依旧来反思一下自身。伊始大一的时候,刚接触到了C语言,一门神奇的语言。老师就教导我们要多敲例子,照着书本敲就可以了。可能当时并没有真正的理解...
  • Marksinoberg
  • Marksinoberg
  • 2016年06月17日 10:00
  • 6821

JDBC编程之程序优化

首先,新建包package com.djx.entity;,其中类为 Identity ,实现代码如下: package com.djx.entity; public abstract class...
  • dengjiaxing0321
  • dengjiaxing0321
  • 2016年03月16日 15:49
  • 124

传智168期--Linux&LAMP编程之Linux2016版额外笔记(2017年8月25日18:50:55)

学Linux的过程中做的一点点笔记,学了几天。 笔记下载地址:http://download.csdn.net/download/juliantem/9950769 http://download...
  • juliantem
  • juliantem
  • 2017年08月25日 18:50
  • 218

GPS模块编程之NMEA0183协议

原文地址:http://blog.csdn.net/northcan/article/details/7261310 ########################################...
  • heli200482128
  • heli200482128
  • 2016年06月14日 15:23
  • 361

C++ COM编程之什么是接口

什么是接口? 说到COM,就不得不说接口了;在进行COM开发的过程中,可以说,我一直都在和各种各样的接口打交道。那接口是什么?对于COM来说,接口是一个包含一个函数指针数组的内存结构,每一个数组...
  • liujiayu2
  • liujiayu2
  • 2015年04月16日 16:09
  • 535

第五周(2) 后台代码解耦与客户端具体功能设计

引言 本周恰巧是开发周期的中期,我们按部就班有条不紊的按照原计划进行开发,这一阶段我们主要的任务有以下几个方面: DAO层的代码重写与解耦评论功能+@我的消息 下面我就我所编写的客户端@...
  • qq_26610669
  • qq_26610669
  • 2017年06月05日 11:28
  • 66

《编程之禅》 转自BlackEagle_的专栏

前言  《编程之道》的出版在程序设计业内得到了普遍的接受,出版社邀请我翻译一些与之相关的文章,以作为那部著名的经典之作的补充。虽然,我申明我的能力难以胜任,但我最终还是被说服试一试。  本书是许多个月...
  • sghe
  • sghe
  • 2006年02月17日 13:20
  • 395

COM编程之二 接口

【1】接口 DLL的接口是它所输出的那些函数。 C++类的接口是该类的一个成员函数集。 COM接口是包含一个函数指针数组的内存结构。 每一个数组元素包含的是一个由组件所实现的函数的地址。 在...
  • liujiayu2
  • liujiayu2
  • 2015年04月16日 18:30
  • 351

编程之禅·水

一程序不过是梦,生于无形无象的禅中,我们只是那做梦的人。二我编程三日,两耳不闻人声,只有硬盘在歌唱。三编译程序在运行,像一条湍急的河流,我静静地等侯。四为何要用LISP?COBOL语言我不懂,所以我用...
  • ccanan
  • ccanan
  • 2007年03月17日 00:38
  • 1718

WinForm编程之XML读写

1 using System;  2  using System.Data;  3 using System.Configuration;  4 using System.Web;  5 using ...
  • zz_dd_yy
  • zz_dd_yy
  • 2014年06月07日 17:45
  • 230
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++编程之数据类型
举报原因:
原因补充:

(最多只允许输入30个字)