签到

05月06日
尚未签到

共有回帖数 0

    空城旧事

    等级:
    首先声明,我不是c语言高手,但本人在此题总共花了近5个小时时间,所以请尊重我的劳动成果,不喜勿喷,谢谢。
    核心代码11步,其他代码用于测试。
    此题能够完成,关键是负数在计算机中的补码表示,否则涉及正负数比较或者两个负数比较很难完成。

    我想尝试完成此题的各位高手都知道关键是找到x,y两数的二进制表示中从左数的第一个不同位。关于这个我有两种思路,但是第一种思路(昨天晚上想的)错了,但是作为注释放在代码中了,送给想看的人。
    第二种思路(待比较的数为x和y):
    1. x和y异或,找出所有x和y不同的位,即x^y;
    2. 分别找到x和y在其不同位中的具体值,即:
    a=x&(x^y);
    b=y&(x^y);
    3. 从第一个不同的位后的首个‘1’开始,将右边的位全置1,做法如下:
    a |= a  1; a |= a  2; a |= a  4; a |= a  8; a |= a  16;
    b |= b  1; b |= b  2; b |= b  4; b |= b  8; b |= b  16;
    其目的是在下一步中唯一确定x和y中的首个不同的位,但表现在a和b中。
    4. 确定x和y中的首个不同的位,用异或,找出能反映两数大小的信息:
    a=a&(a^b);
    //a大返回正值,a小返回负值,相等为0




    楼主 2015-11-05 13:56 回复

共有回帖数 0
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知