为什么下面的代码在必须为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))));
}
答案 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()
在特定情况下也是如此。