C语言中的负数是怎么表示的?

 我来答
White_MouseYBZ
2022-12-18 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6388万
展开全部

C是这样定义单精度数据的——

共有32二进制位,1位符号位+8位阶码(小数点要移动的位数)+23位尾数:

  1. 最高位是符号位,1表示负数,0表示正数。这里-2.5,所以取1。

  2. 接着是8位阶码,阶码用移码表示,最高位为符号,0表负、1表正;单精度要在原值上+127实现,即加01111111。

  3. 把尾数原码接着写在后面,无限小数写够23位即可。注意原码都要化成以1打头(就是小数点移到第一个有效1之后,恢复时小数点应该向哪个方向移几位由阶码表示),并把小数点前面的1省写即可。

对于-2.5具体是这样转换的:

求尾数:2.5的二进制原码是10.1,变成1.01并省去小数点前面的1为01,01就是尾数。

求阶码:由1.01恢复为10.1小数点要向右移一位,所以阶码符号为1(正)、移值为0000001;0000001+1111111=10000000。这就是-2.5的阶码。

求全码:1+10000000+01-->11000000 00100000 00000000 00000000——后面的0是补上的,因为小数点后的0实际无数学意义,但C中要补齐32位。最后11000000 00100000 00000000 00000000这个数就是-2.5的格式化表达。

不知你问的是不是这个意思。

匿名用户
2022-12-22
展开全部
#include#includeintmain(void){doublea,b,c;
scanf("%lf%lf%lf",&a,&b,&c);
doubledelta=b*b-4.0*a*c;
doublex1=(-b-sqrt(delta))/(2.0*a);
doublex2=(-b+sqrt(delta))/(2.0*a);
printf("%.2f%.2f\n",x1,x2);
return0;
}-b直接写成这样就是了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式