鱼C论坛

 找回密码
 立即注册
查看: 3328|回复: 9

一个关于右移运算符的问题

[复制链接]
发表于 2013-8-16 17:10:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>

void main()
{
        int jiancha;
        jiancha = -7;/***************问题在这***********/
        jiancha = jiancha>>1;
        printf("%d\n",jiancha);
        jiancha = jiancha>>1;
        printf("%d\n",jiancha);
        jiancha = jiancha>>1;
        printf("%d\n",jiancha);
}
结果是
-4
-2
-1
不明白为什么这样输出

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-16 17:42:58 | 显示全部楼层
数字在计算机里都按补码存放的,这里先不考虑int的取值范围,按8位考虑。
-7的补码是1111 1001
>>1后:低7位为1111 100;最高位补0 还是补1由不同机器也会不一样;你这里输出为-4,所以最高位肯定是补了1,即右移后数字变成:1111 1100,是-4的补码。
继续右移1后为:1111 1110,是-2的补码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-16 18:03:29 | 显示全部楼层

-7
的补码是11111000吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-16 19:04:03 | 显示全部楼层
aces 发表于 2013-8-16 18:03
-7
的补码是11111000吧

你自己再看看补码是怎么算的吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-16 19:12:51 | 显示全部楼层
应该没错吧 我数学很好的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-16 20:03:57 | 显示全部楼层
算补码不需要数学多好,都是很基本的东西~
当你发现我算的和你算的不一样的时候,尤其是按我算的结果可以解释你的疑问的时候,你有没有自己再看一下补码如何算?有没有认真算一下-7的补码?
如果你还坚持-7的补码是1111 1000,那我无话可说~


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-16 23:32:21 | 显示全部楼层
:titter:年轻人虚心点好啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-17 09:09:03 | 显示全部楼层
确实是我错了 i know
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-17 14:34:40 | 显示全部楼层
-7 如何存放,只要打印一下就知道了
int a = -7;
printf("a = %x\n", a);
试试证明,前面全是1,后面是1001,
上面的是打印16进制,16进制转换2进制,应该没问题吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-17 23:03:28 | 显示全部楼层
tsembrace 发表于 2013-8-16 20:03
算补码不需要数学多好,都是很基本的东西~
当你发现我算的和你算的不一样的时候,尤其是按我算的结果可以解 ...

好吧 我确实错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-14 10:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表