C++ 【2】
(1)简单变量
1.变量名:注意:第一个字符不能是数字;只能数字字母下划线;不能用关键词
最好使用驼峰命名法;第一个字符最好不是下划线;
2.整型:
short(16位)、int、long(32位)、long long(64位)—最小长度
INT_MAX:为int的最大取值;用之前要预处理:#include<climits>
CHAR_BIT:为字节位数;
sizeof:字节长度 用法:
- sizeof(类型名)如
sizeof(int);
- sizeof 变量名 如
sizeof a;
无符号类型:unsigned int change; unsigned short aaa;
其中unsigned
本身就是unsigned int
//演示程序
#include<iostream>
#define ZERO 0
#include<climits>
int main()
{
using namespace std;
short sam =SHRT_MAX;
unsigned short sue =sam;
cout<<"Sam has "<<sam<<" dollars and Sue has "<<sue;
cout<<"dollars deposited."<<endl
<<"Add $1 to each account."<<endl<<"Now";
sam = sam+1;
sue=sue+1;
cout<<"Sam has "<<sam<<" dollars and Sue has "<<sue;
cout<<"dollars deposited.\n Poor Sam!"<<endl;
sam=ZERO;
sue=ZERO;
cout<<"Sam has "<<sam<<"dollars and Sue has "<<sue;
cout<<"dollars deposited"<<endl;
cout<<"take $1 from each account."<<endl<<"Now";
sam =sam-1;
sue =sue-1;
cout<<"Sam has "<<sam<<"dollars and Sue has "<<sue;
cout<<"dollars deposited."<<endl<<"LUCKY Sue!"<<endl;
cin.get();
cin.get();
return 0;
}
运行结果如下
//运行结果
Sam has 32767 dollars and Sue has 32767dollars deposited.
Add $1 to each account.
NowSam has -32768 dollars and Sue has 32768dollars deposited.
Poor Sam!
Sam has 0dollars and Sue has 0dollars deposited
take $1 from each account.
NowSam has -1dollars and Sue has 65535dollars deposited.
LUCKY Sue!
sam为short类型变量;
sue为unsigned short变量;都用SHRT_MAX
函数取到最大short值为32767;然后将这些变量都加1。这对sue来说无非就是32767+1;但sam从32767便为了-32768!!因为short为16位,所以总共长度位2^16=65536;short为-32768~-1 +0+1~32767;unsigned short 0+1~65535;
3.初始化:C++独有 int rocs={7};
int exm={ };
表示变量被初始化为0;
4.进制:在C++中一个数开头为1~9那么他为10进制;如果第一位为0,第二位1-7那么为8进制,如果前两位为0x或0X则为16进制。
0x42转换为十进制为164+2=66;
0xA5转换为十进制为1610+5=165;
042转换为十进制为4*8+2=34;
头文件iostream
中提供了控制符dec
、hex
、oct
、分别用于指示cout
以十进制、十六进制、八进制格式显示整数。
//hex、oct控制符案例
#include<iostream>
int main()
{
using namespace std;
int a =42;
int b =42;
int c =42;
cout<<"a="<<a<<"(10进制)"<<endl;
cout<<hex;
cout<<"b="<<b<<" (16进制) "<<endl;
cout<<oct;
cout<<"c="<<c<<" (8进制) "<<endl;
cin.get();
cin.get();
return 0;
}
结果如下
a=42(10进制)
b=2a (16进制)
c=52 (8进制)
5.常量
6.char类型
成员函数cout.put()
:通过类对象cout来使用函数put()
//cout.put()函数用法
#include<iostream>
int main()
{
using namespace std;
char ch ='M';
int t=ch;
cout<<t<<endl;
cout.put(77)<<endl;
cout.put(ch)<<endl;
cout.put('M')<<endl;
cin.get();
cin.get();
return 0;
}
结果
77
M
M
M
常用转义字符:\n
; \b
; \a
; \r
;分别表示为换行;退格;振铃;回车;
7.signed char 和 unsigned char
char用作数值类型时,两者直接差异非常重要;unsigned char
可以储存0~255;而signed char
范围为-128~127;如果用char变量储存200这样的值,在有些系统上可以,在有些系统上则不行,如果使用unsigned char 就没有这些顾虑。
如果用char来储存标准ASCII字符,则char有没有符号都没有关系。
8.wcha_t
wchar_t
(宽字符类型)可以表示扩展字符集。wcin
和wcout
可用于处理wchar_t类型。另外,可以通过前缀L来指示宽字符常量和宽字符串。
9.bool类型
bool类型表示真假,C++将非0值解释为true,0解释为false。
bool is_ready = true;
true 和 false 都可以通过提升转换为int类型,true被转换为1,false被转换为0;
int ans = true;// ans=1;
int promise = false;//promise=0;
然而任何数字和指针值都可以被隐式转换为bool值。
bool start =-100;//start 为 true;
bool stop = 0;// stop 为 false;
(2)const 限定符
定义常量。
通用格式:const type name = value;
const比 #define好 因为1.它可以明确指定的类型。2.可以使用C++的作用域规则将定义限制在特定的函数或文件中(在后面章节讨论)。3.可以将const用于更复杂的类型(数组和结构)。
(3)浮点数
表示带小数部分的数字,诸如2.5、3.14159、59555.666的数字。
1.书写
a.标准小数点表示法:
12.34
55555.6666
0.002
8.0
即使小数部分为0,也保留。
b.E表示法
3.45E6:3.45*10^6
其中6为指数,指数可以是正数或者负数,在C++中不能为小数;
2.浮点类型
C++有三种浮点类型:float、double、long double;
下面这个程序用来说明区分float 和double区别;
//区分float和double的程序
#include<iostream>
int main()
{
using namespace std;
cout.setf(ios_base::fixed, ios_base::floatfield);
float tub = 10.0/3.0;
double mint = 10.0/3.0;
const float million = 1.0e6;
cout<<"tub = "<< tub;
cout<<",a million tubs = "<< million * tub;
cout<<",\nand ten million tubs = ";
cout<< 10* million *tub << endl;
cout <<"mint = "<< mint <<"and a million mints = ";
cout<<million * mint << endl;
cin.get();
return 0;
}
结果如下
tub = 3.333333,a million tubs = 3333333.250000,
and ten million tubs = 33333332.000000
mint = 3.333333and a million mints = 3333333.333333
程序说明:
- 通常cout会删除结尾的0,例如3333333.250000显示为3333333.25。调用cout.self()将覆盖这种行为。
- cout只打印六位小数,因此tub和mint都是精确的。而当他们乘了一百万,tub在第七个3之后出现了误差。(该系统只保证float至少有6位有效位)。而对于double,系统保证了15位有效位。当mint乘一百万再乘1000后才会出现误差。
cout<<mint*million*10000<<endl;//运行结果为33333333333.333336,显然不对嘛!
3.浮点常量
如果希望常量为float常量类型,请使用f或F后缀。对于long double则使用L或l,(L是更好的选择,因为l像1)。2.24,2.6E8这样的浮点常量属于double类型。
关于浮点常量加后缀和原先有什么区别请参考链接
(4)算术运算符
除法分支
C++中 9/5=1(整型);9.0/5.0=1.8(浮点);9.0/5=1.8(整型和浮点混合混合);浮点常量再默认下为double类型。
类型转换
- 初始化和赋值进行的转换
程序中有如下定义
short a;
long b;
而程序中有这样的语句
b=a;
那么a的类型将转为b的类型;
往往精度大的值转换为精度小的值将出现问题:double转为float,再这种情况下结果不确定;浮点类型转换为整型:小数点后面的数据丢失,有误差;long转换为short,原来的值可能超出目标类型的取值范围。
0赋给bool,变成false。非零变为true;
-
以{}方式初始化时进行的转换
该初始化称为列表初始化,特点是不允许缩窄。浮点型不能到整型,而整型可以转换为u浮点型。long变量可以被初始化为int,因为long总是至少与int一样长。 -
表达式中的转换
-
强制类型转换
在变量ipp中的int类型转换为long可以使用下述表达式的一种:
(long)ipp;
long(ipp);
强制类型转换不会修改ipp变量本身,而是创建一个新的、指定类型的值,可以在表达式中使用这个值。
cout<<int('ipp')
;
强制转换的通用格式:
(typeName) value
typeName (value)
例子如下:
#include<iostream>
int main()
{
using namespace std;
int auks,bats,coots;
auks=19.99+11.99;
bats=(int)19.99 + (int)11.99;
coots=int(19.99)+int(11.99);
cout<<"auks = "<<auks<<", bats = "<<bats;
cout<<", coots= "<< coots <<endl;
char ch ='Z';
cout<<"The code for "<<ch<<" is ";
cout<<int(ch)<<endl;
cout<<"yes,the code is ";
cout<< static_cast<int>(ch)<<endl;
cin.get();
return 0;
}
运行结果为
auks = 31, bats = 30, coots= 30
The code for Z is 90
yes,the code is 90
auto声明
让编译器根据初始值类型推断变量类型:
auto n = 100;//n is int
auto x = 1.5;//x is double
auto y = 1.3e12L;//y is long double
但也会出现误判,谨慎使用,以后在STL用。
终于写完了,学的有点慢,多多体谅,加油,没有什么可以阻挡我们!