C中的“ pow”功能打印的值不正确

时间:2018-09-07 09:23:49

标签: c

为什么下面的代码在必须为128时却给出127作为输出。我什至试图弄清楚,但我不明白为什么是127?

#include<stdio.h>
#include<math.h>
int main()
{
signed char ch;

int size,bits;

size = sizeof(ch);

bits = size * 8;
printf("totals bits is : %d\n",bits);

printf("Range is : %u\n", (char)(pow((double)2, (double)(7))));

}

1 个答案:

答案 0 :(得分:0)

如果您希望将128作为结果,则将pow()的结果转换为int而不是char。例如

printf("Range is : %u\n", (int)(pow((double)2, (double)(7)))); /* this print 128 */

为什么这样

printf("Range is : %u\n", (char)(pow((double)2, (double)(7))));

127打印为pow((double)2,(double)7)128,但同时整个结果标明明确地将类型强制转换为char,默认为{{ 1}}是char,范围是signed,因此它显示-128 to +127

旁注127是浮点函数,就像@lundin建议的一样,您可以找到here。您可以使用

pow()

在特定情况下也是如此。