1. 如果把一个超出其取值范围的值赋给一个指定类型的对象时,结果会怎样?
对于unsigned类型来说,编译器必须调整越界值使其满足要求。编译器会对unsigned类型的可能取值数目求模,然后取得所得值。有些语言中将负数赋予unsigned类型是非法的,但在C++中这是合法的。
对于signed类型来说,很多编译器处理signed类型的方法与unsigned类型类似,但我们并不能保证所有编译器都会这么处理。
例:
如果把-1赋给8位的unsigned char,那么结果是255,因为-1对256取模的结果是255。
2. float,double 和 long double有什么区别?
类型 | 比特(位)数 | 精度 | 数值范围 |
---|---|---|---|
float | 32 | 6~7 | -2^128 ~ +2^128 |
double | 64 | 15~16 | -2^1024 ~ +2^1024 |
long double | 96/128 | 18~19 | -1.2*10-4932~1.2*104932 |
3. 字符’A’与字符串"A"有什么不同?
为了兼容C语言,C++中所有的字符串字面值都由编译器自动在末尾添加一个空字