c语言中,-2.5怎样表示?

c语言中,-2.5怎样表示?,第1张

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

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

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

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

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

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

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

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

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

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

原码:+|x|  或者  -|x|      (正数=0+|x|    负数的=1+|x| )

符号位和数值部分:分开处理

仅对数值部分进行加减运算,符号位起判断和控制作用

规则如下:

1、比较两数符号,对加法实行“同号求和,异号求差”,对减法实行“异号求和,同号求差”。

2、求和:数值位相加,和的符号取被加数(被减数)的符号。若最高位产生进位,则结果溢出。

3、求差:被加数(被减数)与加数(减数)求补相加。

a)最高数值位产生进位表明加法结果为正,所得数值位正确。

b)最高数值位没产生进位表明加法结果为负,得到的是数值位的补码形式,需对结果求补,还原为绝对值形式的数值位。

4、差的符号位:

a)情况下,符号位取被加数(被减数)的符号;

b)情况下,符号位为被加数(被减数)的符号取反。

扩展资料

移码:不管正负,只要将其补码的符号位取反即可。

符号位和数值部分:一起处理

运算公式(假定在一个n位ALU中进行加法运算)

[E1]移+[E2]移=2n-1+E1+2n-1+E2=2n+E1+E2=[E1+E2]补 (mod 2n)

[E1]移–[E2]移=[E1]移+[–[E2]移]补=2n-1+E1+2n–[E2]移

=2n-1+E1+2n–2n-1–E2

= 2n+E1–E2 = [E1–E2]补 (mod 2n)

结论:移码的和、差等于和、差的补码!

运算规则

① 加法:直接将[E1]移和[E2]移进行模2n加,然后对结果的符号取反。

② 减法:先将减数[E2]移求补(各位取反,末位加1),然后再与被减数 [E1]移进行模2n相加,最后对结果的符号取反。

③ 溢出判断:进行模2n相加时,如果两个加数的符号相同,并且与和数的符号也相同,则发生溢出。

阶符是当一个数用科学计数法表示时,它的指数的符号,指数是正还是负,正负号就是阶符。
计算机机内数,当用科学计数法表示时,分尾数,指数,阶符3部分,阶符占1位,负为1,正为0。
c语言用e格式写数时
3456e-03
就是
3456

10的负3次方,
e后面的-号,就是阶符
正阶符,不写东西,或写+号。
3456e03
就是
3456

10的正3次方,

-1是A的阶码,也就是0111的真值,-1的补码就是0111。而-2是B的阶码,也就是0110的真值,-2的补码就是0110。对阶就是:把两个两个浮点数的阶码化相等,如你题中所示,保留较大的阶码-1,然后把B右移ΔE位,B的阶码就变成了-1这就是所谓的对阶。

一个float型实数在内存中占4个字节,即32个二进制bit,从低位到高位依次叫第0位到第31位这32位可以分为3个部分:符号位(第31位),阶码(第30位到第23位共8位),尾数(最低23位)。
1、符号位。最高位也就是第31位表示这个实数是正数还是负数,为0表示正数或0,为1表示负数
2、阶码。第30位到第23位这8个二进制位表示该实数转化为规格化的二进制实数后的指数与127(127即所谓偏移量)之和即所谓阶码
规格化的二进制实数的指数只能在-127----+127之间,所以,一个float型数的最大值在+2^127即+3410^38,最小值在-2^127即-3410^38
3、尾数。其他最低的23位即第22位到第0位表示该实数转化为规格化的二进制实数后小数点以后的其余各位即所谓尾数
double的计算与此类似,double的符号位为63位,指数为62~52位,共11位。表示的范围为-1024~1023。尾数为51~0。表示的范围为-1710^308~+1710^308

1:我们来看一下补码的求得过程:将原码的各位取反,再加1,得到补码。举个例子,1001,它全部取反之后就是0110,再加1得到0111。将原码与补码加相,会得到10000。我们应该知道,计算机最基础的运算器只能做加法,所以叫累加器,它做不了减法。所以当需要减法的时候我们取减数的补码,用被减数去加这个补码。如果是1111-1001=0110的话就相当于1111-(10000-0111)=1111
0111=0110,其中0111是1001的补码。由于码不像数字,码是有位数的限制的,当有多于其位数的 *** 作时是不表现出来的,所以减去一个数的原码就相当于加上它的补码。相信,看明白了这一条,第三个问题也就解决了。
2规定……惯例的,当初就这么说的,反正二进制就两个数,不是0就是1,取反就是对方。1比0大,正数比负数大……我是这样想的,这一点我不敢肯定。
4不记符号位的话,原码
补码=1000(0的位数与原码的位置一致),那你说这两个码是不是互为原补码?取补码之后再取一次补码就是自身了。

这三道题都是二进制。
1,这个10和100怎么算出来的?
10,100(二进制)对应的十进制就是2和4
所以0110101右移2位,和000110101右移4位,等于110101
2,同理x=011010000002^(-11) 中的-11也就是-3。左移三位等于00001101000
3,同理1,2。

你这个缺条件了,-108只是尾数部分,你的阶码部分去哪了?
-108的补码是10010100,然后左移7位,得出10010100,阶码此时为7,负数的补码规格化后应该是10XXXX,所以不用再移位了,那么阶码就是7,0111


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

原文地址: https://outofmemory.cn/yw/12702840.html

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

发表评论

登录后才能评论

评论列表(0条)

保存