2010/10/26
关键字:基本内置类型、整型、浮点型、字面值常量、变量初始化
C++标准规定了每个算术类型的最小存储空间,但不阻止编译器使用更大的存储空间。
类型 | 含义 | 最小存储空间 | 一般存储空间 |
bool | 布尔型 |
|
|
char | 字符型 | 8位 | 8 |
wchar_t | 宽字符型 | 16位 | 16 |
short | 短整型 | 16位 | 16 |
int | 整型 | 16位 | 32 |
long | 长整型 | 32位 | 32 |
float | 单精度浮点型 | 6位有效数字 | 32 |
double | 双精度浮点型 | 10位有效数字 | 64 |
long double | 扩展精度浮点型 | 10位有效数字 | 96或128 |
将超出取值范围的值赋给一个指定类型的对象时,采用取模的方式:
unsigned char uctemp1 = 336; //uctemp1 = 336%256 = 80;
unsigned char uctemp2 = -336; //uctemp2 = (-336+256+256)%256 = 176;
字面值常量有三种进制表示,十进制、八进制、十六进制:
int i1 = 20; //十进制20
int i2 = 024; //八进制20
int i3 = 0x14; //十六进制20
字面值常量后缀:
long n1 = 1294L; //推荐使用L
long n2 = 1294l; //容易和混淆
unsigned long n3 = 1294ul;
unsigned long n4 = 1294UL; //推荐
unsigned long n5 = 1294LU;
unsigned long n6 = 1294lu;
科学计数法:
3.14f = 3.14e0f = 3.14E0F = 3.14f * 100
0.0314 = 3.14e-2f = 3.14E-2F = 3.14f * 10-2
在字符前加L标识宽字符字面值:
L’a’
同时输出宽字符型和字符型是不确定的,语法没有指定,取决于编译器。笔者在VC8下试了,编译出错。
cout<<"32" "232"; //ok
cout<<"32" L"232"; //vc8下编译不通过
左值:可以出现在赋值语句的左边或右边。
右值:只能出现在赋值语句的右边。
C++中有两种初始化形式:
int val1(1023); //直接初始化,效率更高
int val2 = 1023; //复制初始化
陷阱:
int val = val; //VC8编译报警告,运行时错误
cin>>int val1; //编译错误
double calc()
{
return 0.0;
}
int main()
{
double calc = calc(); //编译错误
return 0;
}
个人推测赋值的操作步骤是:
1. 先分配左值空间,并将该空间命名为变量名.
2. 计算右值.
3. 执行赋值操作.
内置类型变量的初始化:
函数体外定义的一般变量都初始化为0,否则不进行自动初始化.也就是堆、栈中声明的变量不进行初始化,静态存储区等会初始化为0.
明天继续学习堆、栈、静态缓存区、常量缓存区。