您的位置:首页 > 编程语言 > C语言/C++

C/C++数据类型及其长度总结

2014-03-23 10:38 330 查看


C语言中数据类型的长度以及作用值域

类型标识符类型说明长度

   (字节)
范围备注
char字符型1-128 ~ 127-27 ~ (27 -1)
unsigned char无符字符型10 ~ 2550 ~ (28 -1)
short int短整型2-32768 ~ 327672-15 ~ (215 - 1)
unsigned short int无符短整型20 ~ 655350 ~ (216 - 1)
int整型4-2147483648 ~ 2147483647-231 ~ (231 - 1)
unsigned int无符整型40 ~ 42949672950 ~ (232-1)
float实型(单精度)41.18*10-38 ~ 3.40*10387位有效位
double实型(双精度)82.23*10-308 ~ 1.79*1030815位有效位
long double实型(长双精度)103.37*10-4932 ~ 1.18*10493219位有效位
 一个指针本身占用4个字节

unsigned 用于修饰 int 和 char 类型。它使int 或 char 类型成为无符号类型。

signed 是 unsigned 反义词,如 signed int 表示有符号类型,不过signed可以省略,所以上面列出char,short int,int 都是有符号类型。

 

有 short int (短整型) ,所以也就有对应 long int (长整型)。long int 用于表示4个字节(32位)的整数。但是在我们现在普通使用的32位计算机中,int 默认就是4个字节,所以long也是可以省略的。

(较早几年,也就是Windows 3.1/DOS 流行的时候,那时的机器及操作系统都是16位的,这种情况下,int 默认是16位的。此时,如果想实现32位整数,就必须定义为这样的类型:long int)。

在浮点数方面,我们最常用的将是 double。它的精度适合于我们日常中的各种运算。当然,float的精度也在很多情况下也是符合要求的。

布尔型(bool)和无类型(void)

除字符型,整型,实型以外,布尔型和无类型也是较常用的两种数据类型。

 布尔型(bool)

布尔类型是C++的内容,C语言没有这一类型。

布尔类型的数据只有两种值:true(真) 或 false(假)。

什么时候使用布尔型呢?

履历表中一般有“婚否”这一项,婚否这种数据就适于用真或假来表示。性别男女,有时也会用布尔值表示,(一般程序都不约而同地把男性设置“真”,女性设置为“假”。)

 无类型(void)

这个类型比较怪“无”类型。是的,没有类型的类型。或者我们这样认为比较好接受:在不需要明确指定类型的时候,我们可能使用 void 来表示。

=========================================================================================

=========================================================================================

=========================================================================================

Visual C++常用数据类型转换详解

本文将介绍一些常用数据类型的使用。 

我们先定义一些常见类型变量借以说明 

int i = 100; 

long l = 2001; 

float f=300.2; 

double d=12345.119; 

char username[]="女侠程佩君"; 

char temp[200]; 

char *buf; 

CString str; 

_variant_t v1; 

_bstr_t v2; 

一、其它数据类型转换为字符串 

短整型(int) 

itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制 

itoa(i,temp,2); ///按二进制方式转换 

长整型(long) 

ltoa(l,temp,10); 

二、从其它包含字符串的变量中获取指向该字符串的指针 

CString变量 

str = "2008北京奥运"; 

buf = (LPSTR)(LPCTSTR)str; 

BSTR类型的_variant_t变量 

v1 = (_bstr_t)"程序员"; 

buf = _com_util::ConvertBSTRToString((_bstr_t)v1); 

三、字符串转换为其它数据类型 

strcpy(temp,"123"); 

短整型(int) 

i = atoi(temp); 

长整型(long) 

l = atol(temp); 

浮点(double) 

d = atof(temp); 

四、其它数据类型转换到CString 

使用CString的成员函数Format来转换,例如: 

整数(int) 

str.Format("%d",i); 

浮点数(float) 

str.Format("%f",i); 

字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值 

str = username; 

五、BSTR、_bstr_t与CComBSTR 

CComBSTR、_bstr_t是对BSTR的封装,BSTR是指向字符串的32位指针。 

char *转换到BSTR可以这样: BSTR b=_com_util::ConvertStringToBSTR("数据");///使用前需要加上头文件comutil.h 

反之可以使用char *p=_com_util::ConvertBSTRToString(b); 

六、VARIANT 、_variant_t 与 COleVariant 

VARIANT的结构可以参考头文件VC98\Include\OAIDL.H中关于结构体tagVARIANT的定义。 

对于VARIANT变量的赋值:首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型的变量赋值,举个例子: 

VARIANT va; 

int a=2001; 

va.vt=VT_I4;///指明整型数据 

va.lVal=a; ///赋值 

对于不马上赋值的VARIANT,最好先用Void VariantInit(VARIANTARG FAR* pvarg);进行初始化,其本质是将vt设置为VT_EMPTY,下表我们列举vt与常用数据的对应关系: 

unsigned char bVal; VT_UI1 

short iVal; VT_I2 

long lVal;   VT_I4   

float fltVal;   VT_R4 

double dblVal;   VT_R8   

VARIANT_BOOL boolVal;   VT_BOOL 

SCODE scode;   VT_ERROR 

CY cyVal;   VT_CY 

DATE date;   VT_DATE 

BSTR bstrVal;   VT_BSTR 

IUnknown FAR* punkVal;   VT_UNKNOWN 

IDispatch FAR* pdispVal;   VT_DISPATCH 

SAFEARRAY FAR* parray;   VT_ARRAY|* 

unsigned char FAR* pbVal;   VT_BYREF|VT_UI1 

short FAR* piVal;   VT_BYREF|VT_I2 

long FAR* plVal;   VT_BYREF|VT_I4 

float FAR* pfltVal;   VT_BYREF|VT_R4 

double FAR* pdblVal; VT_BYREF|VT_R8 

VARIANT_BOOL FAR* pboolVal; VT_BYREF|VT_BOOL 

SCODE FAR* pscode;   VT_BYREF|VT_ERROR 

CY FAR* pcyVal;   VT_BYREF|VT_CY 

DATE FAR* pdate; VT_BYREF|VT_DATE 

BSTR FAR* pbstrVal;   VT_BYREF|VT_BSTR 

IUnknown FAR* FAR* ppunkVal;   VT_BYREF|VT_UNKNOWN 

IDispatch FAR* FAR* ppdispVal; VT_BYREF|VT_DISPATCH 

SAFEARRAY FAR* FAR* pparray;   VT_ARRAY|* 

VARIANT FAR* pvarVal;   VT_BYREF|VT_VARIANT 

void FAR* byref;   VT_BYREF 

_variant_t是VARIANT的封装类,其赋值可以使用强制类型转换,其构造函数会自动处理这些数据类型。 

例如: 

long l=222; 

ing i=100; 

_variant_t lVal(l); 

lVal = (long)i; 

COleVariant的使用与_variant_t的方法基本一样,请参考如下例子: 

COleVariant v3 = "字符串", v4 = (long)1999; 

CString str =(BSTR)v3.pbstrVal; 

long i = v4.lVal; 

七、其它 

对消息的处理中我们经常需要将WPARAM或LPARAM等32位数据(DWORD)分解成两个16位数据(WORD),例如: 

LPARAM lParam; 

WORD loValue = LOWORD(lParam);///取低16位 

WORD hiValue = HIWORD(lParam);///取高16位 

对于16位的数据(WORD)我们可以用同样的方法分解成高低两个8位数据(BYTE),例如: 

WORD wValue; 

BYTE loValue = LOBYTE(wValue);///取低8位 

BYTE hiValue = HIBYTE(wValue);///取高8位

 

=========================================================================================

=========================================================================================

=========================================================================================
 unsigned char

 单字节

 0~255

 

signed char

 单字节

 -128~+127

 

unsigned int

 双字节

 0~65535

 

signed int

 双字节

 -32768~+32767

 

unsigned long

 四字节

 0~4294967295

 

signed long

 四字节

 -2147483648~+2147483647

 

float

 四字节

 ±1.175494E-38~±3.402823E+38

 

 

c++ 基本数据类型长度(vc6.0  32位机;  字节为单位

size of int is:   4

size of char is:   1

size of short int is:   2

size of double is:   8

size of unsigned int is:   4

size of float is:   4

size of long double is:   8

size of long int is:   4

size of long int is:   4

size of unsigned char is:   1

size of signed char is:   1

size of unsigned long int is:   4

size of signed int is:   4

size of unsigned short int is:   2

size of signed short int is:   2

size of signed int is:   4

size of signed long int is:   4

sizeof  指针 is   4;

再细致和规范点

1、 字符型char:一个字节表示,通常表示单个字符或小整数,字符型常量用一对单引号‘ ’夹着一个字符表示。

(1)可打印字符常量表示:

‘a’    ‘2’ ‘,’    ‘ ’

字符常量在内存中的存储格式依赖于ASCП码表的。

(2)不可打印字符常量,通过斜杠“\”表示:

‘\n’   换行符     ‘\\’ 反斜杠 ‘\t’   水平制表符 ‘\0’ 空(NULL)字符

2、 整型int:一个机器字长度的整数值。   (这个概念很重要!!不是定长,而是机器决定)

短整型short:半个机器字长度的整数值。

长整型long:一个或两个机器字长度的整数值。

在32位机器中,int和long通常相同。

(1)上面提到的char字符型,也可看作长度为一个字节的字符型整数。

 

 

常用的部分 Windows 数据类型 

  

  WORD 16位无符号整数 

  LONG 32位有符号整数 

  DWORD 32位无符号整数 

  HANDLE句柄   32位整数

  UINT 32位无符号整数 

  BOOL  布尔 

  LPTSTR  指向字符串的32位指针 

  LPCTSTR  指向字符串常量的32位指针

  HPARAM 32位消息参数 int

  LPARAM 32位消息参数 int

  WPARAM 32位消息参数 int 

  HINSTANCE 实例句柄 int

  HDC 设备描述表句柄 int

  HWM 窗口句柄 int 

 

关于char,tchar,wchar

tchar 在unicode下是wchar(双字符)

而普通是char

char在两者都是char

一般导入一些文件名之类操作时,爱用tchar稳妥.

 

 

常用的windows宏定义

#define CALLBACK    __stdcall

#define WINAPI      __stdcall

#define WINAPIV     __cdecl

#define APIENTRY    WINAPI

#define APIPRIVATE  __stdcall

#define PASCAL      __stdcall
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: