c语言算术语句
关于c语言的算术语句由于最近用单片机经常发生用c语言算术方面错误。
最近用sqrt,abs,power,cos经常发生些错误。
想请教下一般都有哪些错误。用算术语句要注意什么方面(初学)
另外想问下强制转换如何使用。感觉有点模糊。
关于c语言的算术语句由于最近用单片机经常发生用c语言算术方面错误。
最近用sqrt,abs,power,cos经常发生些错误。
想请教下一般都有哪些错误。用算术语句要注意什么方面(初学)
另外想问下强制转换如何使用。感觉有点模糊。
答案:对于算术运算,重要是是内存的管理,放置溢出,越界比如进行乘法运算,两个int的乘数结果范围可能超过int的表示范围
对于除法,防止除数为0,还有类型转换,两个int想除结果为int,不是float
强制类型转换就是直接在一个变量前面加上括号和类型,比如把一个int强制转换成float,可以这样:
int iNum = 0;
float fSec = (float)iNum;
强制类型转换也要注意防止内存溢出和意向不到的结果,主要就是要多各种数据类型在内存中的存储方式要了解。
你调用的这几个函数(sqrt,pow(power??),cos)都不是什么省油的灯。要知道单片机(特指51)是八位的,你那几个运算都牵涉到浮点数(32位或64位)的运算,你觉得用单片机处理合适吗?我最多也就使用一下pow函数(实在万不得已)。你编什么要用到这么多"大型"函数?计算器??我的意见是能避免就避免,想办法避免。
讲到强制转换,我说一点我的个人见解吧。如果你使用的数据类型是标准C的,那强制转换就和标准C里一样,举个例子:现有变量,unsigned int num; unsigned char numH, numL;如果numL = (unsigned char) num;会得到什么呢?很简单就是num的低8位(直接截断num的低八位),那怎么得到num的高八位?这样写:num = num >> 8;(先右移八位),numH = (unsigned char)num;这样就得到num的高八位了。 如果数据类型不是标准C里的,可能会有所不同,比如bit类型,现有unsigned char num;bit tmp;那tmp = (bit) num得到什么呢?num的最低位??错!!bit的强制转换有点特殊:只要被转换的数不是0,那强制转换的结果就是1,反之,被转换的数是(等于)0,那强制转换的结果就是0。
以上是我的个人见解。
一般是用转换,1.Convert.需要转换的类型(转换的数据);
2.int.parse(转换的数据);
3.(类型)转换的数据;
等等等等。。许多。。这是比较常用的