打印

求助:一段小代码的疑问

[复制链接]
1386|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
leshak|  楼主 | 2013-5-16 21:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
u32 X;

        X=X-0XB26;            //2.3V
        if((X&0X80000000)!=0)
        {
                X=X^0XFFFFFFFF;
                X=X+1;
        }
当X<2.3V的时候为负数,执行条件语句,请问下下面两句的作用是?连符号位都取反了啊
                X=X^0XFFFFFFFF;
                X=X+1;

相关帖子

沙发
叶伤| | 2013-5-16 21:56 | 只看该作者
从4位分析,设X=1001,若是补码,反补为减一取反,则x=~(001-1)=1111(符号位保留),即原码为-7。这里是x=x^0xf=1001^1111=0110B,加1=111B=7,也就是你这里是补码取绝对值。

使用特权

评论回复
板凳
airwill| | 2013-5-17 07:15 | 只看该作者
这段代码写得不是很好
如果 X 定义成 signed 就好理解了.

s32 X;

       X  -=0XB26;            //2.3V
        if  (X<0)
        {
                X  =0 - X;
        }

如果楼主有心, 可以用调速器跟踪一下. 这段代码和楼主的代码.
执行过程 X 或寄存器的数值是完全一样的

使用特权

评论回复
地板
ayb_ice| | 2013-5-17 07:53 | 只看该作者
直接abs

使用特权

评论回复
5
leshak|  楼主 | 2013-5-17 09:16 | 只看该作者
还有个疑问,关于有符号数和无符号数的概念的,这个我一直比较模糊
u8 X;//改为u8无符号数
X=X-4;
当 X= 2的时候,结果会是-2,但是X是无符号数,那计算机还会自动把这个-2转变成-2的补码形式嘛,即11111110?

使用特权

评论回复
6
leshak|  楼主 | 2013-5-17 09:17 | 只看该作者
还有个疑问,关于有符号数和无符号数的概念的,这个我一直比较模糊
u8 X;//改为u8无符号数
X=X-4;
当 X= 2的时候,结果会是-2,但是X是无符号数,那计算机还会自动把这个-2转变成-2的补码形式嘛,即11111110?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

101

主题

522

帖子

4

粉丝