可以
在数学中,数字有正负之分。在C语言中也是一样,short、int、long 都可以带上正负号,如果不带正负号,默认就是正数。符号也是数字的一部分,也要在内存中体现出来。符号只有正负两种情况,用1位(Bit)就足以表示;C语言规定,把内存的最高位作为符号位。
负数是因为两个计算相加的和所得到的数值结果溢出了,导致这个int型f3最高位出现了1,也就是负数了,看一看关于计算机中数值的表示吧,在《深入理解计算机系统》中介绍的比较详细,在这里,如果你这个程序中将f1,f2,f3三个变量换成double型或者unsigned int,就不会出现负数了。
for循环括号写错位置了吧 还有那个分号你是闹哪样?
加了那个分号之后 i的数值是31 2^31-1 是double的精度 就是这个1 直接超出来精度范围 变成了 -2^31 具体原因可以-128~+127 的5位二进制来理解
pow函数记得里面是pow(double,int)类型 返回是 double类型 这些小细节注意一下
代码风格也稍微培养一下吧 乱糟遭的以后代码量大了 调试累死你
#include<stdioh>#include<stdlibh>
#include<mathh>
int main()
{
int i ;
double z ,a , n ;
z = 0; a = 20;
for( i=0 ; i<=30 ; ++i )
{
n = pow(a,i);
z = z+n;
}
printf("z=%lf\n" , z );
system("pause");
return 0;
}
负数在内存中是以补码的形式存储的,
即 -666
原码:1000 0010 1001 1010
反码:1111 1101 0110 0101 (符号位不变,其它位取反)
补码:1111 1101 0110 0110 (反码+1)
即,实际内存中的数据为0b1111 1101 0110 0110=64870
而a为unsigned short int,所以反馈的应该就是64870正数。
#include<stdioh>
voidmain(void)
{
inta,b,c,max;
printf("inputthreerealnumbers:\n");
scanf("%d%d%d",&a,&b,&c);
if(a>=b)
max=a;
else
max=b;
if(max>=c)
printf("%d",max);
else
printf("%d",c);
getch();
return0;
}
扩展资料
C语言signedchar型表示的数值范围-128~127
-0和+0其实是同一个数字,因此原码中0b10000000和0b00000000都表示数字0。现在补码下的0只有一个表示方式:0b00000000,二进制码0b10000000就多余出来了。
浪费是可耻的,多出的二进制码0b10000000不能白白丢弃。若考虑数字0的二进制码0b00000000,从它的符号位来看,计算机应该是将其当做“正数”的,0~127是128个“正数”。
现在考察多出的二进制码0b10000000,从它的符号位来看,把它当做负数是合情合理的,事实上在C语言中,它表示-128,从-128到-1,恰好是128个“负数”。
以上就是关于c语言中负数可以与吗全部的内容,包括:c语言中负数可以与吗、求高手解释:C++中下面代码在执行时出现了许多负数是什么意思 谢谢!、c语言中求救这个程序运行结果怎么有个负号等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)