赞
踩
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精度问题
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
————————————————
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。