c语言中负数可以与吗

c语言中负数可以与吗,第1张

c语言负数可以与吗

可以

在数学中,数字有正负之分。在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语言中求救这个程序运行结果怎么有个负号等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9969639.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存