己知f(n)=,计算f(n)的C语言函数f1如下: 将f1中的int都改为float,可得到计算f(n)的另一个函数f2。假设unsigned和int型数据都占32位,float采用IEEE754单精度标准。 请回答下列问题。 当n=0时,f1会出现死

admin2018-08-17  32

问题 己知f(n)=,计算f(n)的C语言函数f1如下:

将f1中的int都改为float,可得到计算f(n)的另一个函数f2。假设unsigned和int型数据都占32位,float采用IEEE754单精度标准。
请回答下列问题。
当n=0时,f1会出现死循环,为什么?若将f1中的变量和n都定义为int型,则f1是否还会出现死循环?为什么?

选项

答案由于i和n是unsigned型,故“i<=n.1”是无符号数比较,n=0时,n-1的机器数为全1,值是232-1,为unsigned型可表示的最大数,条件“i<=n.1”永真,因此出现死循环。 若i和n改为int类型,则不会出现死循环。 因为“i<=n.1”是带符号整数比较,n=0时,n-1的值是-1,当i=0时条件“i<=n-1”不成立,此时退出for循环。

解析
转载请注明原文地址:https://kaotiyun.com/show/QSRi777K
0

最新回复(0)