main( )
{int a=100,b=-1;
printf ("a=%d,%x,%o,%u\n",a,a,a,a);
printf ("b=%d,%x,%o,%u\n",b,b,b,b);}
运行结果:
a=100,64,144,100
b=-1,ffff,177777,65535
如果b是其他数如-2那该怎么算啊,结果会是多少啊
求解下列C语言程序运算结果中b中最后的数65535是怎么算出来的,还有-1的存储形式怎么是1111111111111111?
答案:3 悬赏:40 手机版
解决时间 2021-01-26 05:39
- 提问者网友:你给我的爱
- 2021-01-25 12:46
最佳答案
- 五星知识达人网友:低音帝王
- 2021-01-25 14:19
一、-1在计算机中以补码形式存储,在16位的编译系统中,-1的补码是1111111111111111;在32位的编译系统中,-1的补码是11111111111111111111111111111111;根据运行结果,你是情况属于16编译系统;
二、-1的补码1111111111111111以无符号整数%u输出就是65535。即(65535)10=(1111111111111111)2。
二、-1的补码1111111111111111以无符号整数%u输出就是65535。即(65535)10=(1111111111111111)2。
全部回答
- 1楼网友:掌灯师
- 2021-01-25 14:53
取反加一,因为1的二进制码是:0000 0000 0000 0001,取反:你好!
-1二进制表示为10000000000000001,负数用反码表示为
- 2楼网友:躲不过心动
- 2021-01-25 14:43
你这个问题非常有意义。
虽然我们都知道浮点数的格式定义在IEEE 754,我们可以换算出你定义的值。但是你这里打印的却不是我们换算出来的值,说明这样打印的方法有问题。
可以做以下试验证明:比如你定义3个一样的浮点数,float a, b ,c; a = b = c = 9.0;
理论上编码方式一样,打印出来就应该一样(无论值是什么)。可是用你的方法打印出来的结果是不一样的!!!哈哈!
具体原因我也不清楚,一直想在内存里面实际看看,最近工作忙,一直没有对比过。我怀疑是地址选择有些问题。也许用 printf("%x %x %x\n", *((unsigned int *) &a), *((unsigned int *) &b), *((unsigned int *) &c)); 打印可以解决问题。你可以试试看。或者用调试工具吊起来实际看看。
.
希望能够帮助你 ^_^ 也希望能够选为最佳答案!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯