-
Notifications
You must be signed in to change notification settings - Fork 0
traps
AN QIULIANG edited this page Nov 14, 2016
·
1 revision
double d = 0.5;
float f = (float)d;
double d2 = f;
bool b = d == d2;
double d = 0.6;
float f = (float)d;
double d2 = f;
bool b = d == d2;
这里b也false。刚才这个操作如果开始另d等于0.5结果就将会true。乍一看0.6这个数这么短,double和float都肯定能够表示那么转换过去,再转换回来结果理应相等。其实这因为我们用十进制思考困难太久了。如果我们0.6化成二进制小数,可以发现得到结果0.10011001……(1001循环)这一个无限循环小数。因此不管float还double它存储0.6时候都无法完全保存它精确值(计算机不懂分数呵呵)。这样话由于float保存23位,而double保存52位,就造成了double转化成float时候丢失掉了一定数据,再转换回去时候那些丢掉值被补成了0。因此这个后来double和从前double值已经不再一样了。
int main(void) {
int a[3][2] = { (0,1), (2,3), (4,5) } ;
int *p ;
p = a[0] ;
printf(“%d”, p[0] ) ;
}
void foo(const char **p) {
}
void test(char **p) {
foo(p);
}
C语言: sizeof('a') = 4
C++语言:sizeof('a') = 1
#include <stdio.h>
int main(void) {
int x = 10;
while (0 <---- x) {
printf("%d ", x);
}
return 0;
}