|
发表于 2006-3-16 13:56:48
|
显示全部楼层
C数据类型道理上应该遵循向上靠原则,Height是int的,那么运算时候应该是按照long计算的,结果也是long型的.
cv计算很奇怪,但是最好养成一个数据类型强制转换习惯吧!
看看下面的计算(cv中的):
int c = (char a) * 200 + (char b) * 512;
这个结果很可能出错,请注意!
错误原因在这里:(char a) * 200 ,cv认为既然都是char的,那么他就认为结果也是char的,但是如果刚好两个char的:100 *100 = 10000就溢出了,cv就把结果转换成char的,结果是0,显然错误.但是如果这样:8 * 6 + (char b) * 512;结果就正确了.
这个式子:(char b) * 512; 有个512存在,cv就按照int进行计算,结果保留成int,结果正确.
正确的如下:
int c = (int)(char a) * 200 + (char b) * 512;
并且在cv的user manual中有乘法计算注意事项,就说的是这个,要求用户手动强制转换,建议用cv的还是要好好看看datasheet |
|