当前位置:   article > 正文

c++ 数据类型介绍_c++数据类型

c++数据类型

1.bool  布尔型  1位

bool类型表示true和false。可以将算术类型的任何值赋给bool对象。

0值算术类型代表false,其他任何非零的值都代表true

2.void 空类型

3. short int 、 int和 long int  区别 所占字节一般不一样(也可能是一样 的,完全取决于编译器,有的编译器 int和long int都是占四个字节,那么取值范围就是一样的)

一般理解 short int 是两个字节  int 4个字节  long int是8个字节

c++只是规定 int所占字节不大于long int 不小于 short int

如果字符长度是一样的而且 都是signed或者都是unsigned,那么其实可以相互赋值

如果是字节不一样只是说他们的取值范围不一样

整形int,short和long都默认为带符号型

要获得无符号型则必须指定该类型为unsigned。比如unsigned long。

54 这种一般按int类型处理 ,如果是后面加L或者l按 long int处理    如 54l或者421L

4. char 一般是1个字节,也分 signed和unsigned

如果是unsigned 取值范围是 0-255  这很好理解   2的8次方  256  但是是从0开始取值的,所以取值范围是 0-255

如果是signed  取值范围是-128-127   为啥不是-127-127

signed  有符号  表示的最高位都是符号位 数值都是以补码的形式存放的

1.当是正数时,符号位是0, 其他位是以补码形式存放,正数补码就是原码编码

2.当是0时,

3.当是负数时,符号位是1 ,其他位是以补码形式存放,负数补码就是原码取反然后再加1

那么就多出一个0 本来0 都是00000000 已经有一个0了   现在 10000000 补码 11111111  再加1 就是10000000   就有两个0     人为规定  10000000就是-128    

正数最大范围是01111111  也就是127  所以取值范围是 -128-127

包括上面的 short int 、int、和long int都signed的时候取值范围是这样计算



char 是一种整数类型,这句话的含义是,char所能表示的字符在C/C++中都是整数类型。好,接下来,很多文章就会举出一个典型例子,比如,'a'的数值就是0x61。这种说法对吗?如果你细心的读过K&R和BS对于C和C++描述的原著,你就会马上反驳道,0x61只是'a'的ASCII值,并没有任何规定C/C++的char值必须对应ASCII。C/C++甚至没有规定char占几位,只是规定了sizeof(char)等于1。
当然,目前大部分情况下,char是8位的,并且,在ASCII范围内的值,与ASCII对应。

宽字符 wchar_t
正如char没有规定大小,wchar_t同样没有标准限定,标准只是要求一个wchar_t可以表示任何系统所能认识的字符,在win32 中,wchar_t为16位;Linux中是32位。wchar_t同样没有规定编码,因为Unicode的概念我们后面才解释,所以这里只是提一下,在 win32中,wchar_t的编码是UCS-2BE;而Linux中是UTF-32BE(等价于UCS-4BE),不过简单的说,在16位以内,一个字符的这3种编码值是一样的。

wchar_t  宽字符

char用一个字节表示一个字符,宽字符就是用≥2个字节表示一个字符。
比如(以Windows下小端存储为例)
char c=’A’;//内存中对应字节41
wchar_t wc=L’A’;//内存中对应字节41 00
char cs[]=”AB”;//内存中对应字节41 42 00
wchar_t ws[]=L”AB”;//内存中对应字节41 00 42 00 00 00

字符常量

1.普通字符常量  如 'a'、'k'、'&'单引号 智包含一个字符

2.转义字符常量  以\开头的字符序列    如'\n'、 '\a'、'\ddd' 转义字符可能包含两个或者多个字符,但是它只代表一个字符

字符存储的时候都是存的ASCII码   如 'A' 实际存储的是65

int 在char没超出范围的时候是可以互相赋值的

int a = 65  count<<a;输出的是65

char a = 65  count<<a;输出的是A

3.字符串  "abc"包含三个字符 占四个字节(abc)"abc\a"包含四个字节占5个字节  因为   字符串末尾会自动加上'\0'作为字符串结束的标志

4.浮点数 float 、double、long double类型

float 是单精度浮点型 ,double 是双精度浮点型 ,long double是长双精度类型,所占字节长度不一样,有效数字长度不一样(也就是精度不一样),指数范围也不一样。long double在有的编译器和double长度是一样的,这种情况下那就跟double没区别了

78.9 这种一般默认按double类型处理  如果加F或者f 如 42f   、54.2F则按float处理

如果78.9L或者78.9l按 long double来处理

 浮点数有两种表示方式 

1.十进制小数方式 如78.、.09、.0

2.指数方式(都按双精度处理)  数符(表示正负) + 数字部分(如.1254) + 指数部分(3)

如a= 0.314e1 = 3.14e0 = 31.4e-1 = 314e-2  

e1表示 10的1次方

修改指数小数点是可以浮动的,但是还是一个数,这就是浮点数的由来

一般在内存中 存储的还是 数字部分是要小于1,同事小数点后面的第一个数字必须大于0

a= 0.314e1 = 3.14e0 = 31.4e-1 = 314e-2  在内存中都表示0.314e1

float和double精度问题

C++中float和double类型的精度问题说明_tiandao2009的博客-CSDN博客_c++中double的精度https://blog.csdn.net/tiandao2009/article/details/79840017

float与double的精度问题 - 长江同学 - 博客园 (cnblogs.com)https://www.cnblogs.com/bruceChan0018/p/14981725.html

float和double的精度 (bbsmax.com)https://www.bbsmax.com/A/nAJv9b93zr/

0开头表示8进制,0x或0X开头表示16进制。

2、后缀:

—— l或L表示long常量

—— u或U表示unsigned int常量

—— ul、uL、Ul、UL、lU、lu、LU、Lu表示unsigned long常量。(lu可以采用任意顺序和大小写表示)

—— ll、LL表示long long 常量。

—— ull、Ull、uLL、ULL表示unsigned long long常量。

3、对于浮点常量,

—— f或F表示float

—— l或L表示long double

—— 其他都表示double

4、不带后缀时的规则——尽可能采用小的类型:

—— 对于10进制:int->long->long long

—— 对于8进制或16进制:int->unsigned int->long->unsigned long->long long ->unsigned long long 



————————————————
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/929099
推荐阅读
  

闽ICP备14008679号