首页 新闻 搜索 专区 学院

程序使用寄存器多少位

0
悬赏园豆:10 [已关闭问题] 关闭于 2014-08-19 20:35

求解释下,为什么这段程序输出是250

#include <cstdio>

int main()
{
    unsigned char a = 0xA5;
    unsigned char b = ~a >> 4 + 1;
//    std::cout<<b<<std::endl;
    printf("%d", b);

    return 0;
}

主要是我不明白程序使用了寄存器的哪些位

c
没出没的主页 没出没 | 初学一级 | 园豆:8
提问于:2013-03-23 11:41
< >
分享
所有回答(1)
0

1. ~a:把a取反,得到ox5a

2. 4+1:C语言中加法优先级高于移位,因此先计算加法,结果为5

3. ~a>>5:右移5位,先转为整数,再移位,补入1,结果为0xfa,即250

jinhuawang76 | 园豆:303 (菜鸟二级) | 2013-03-29 12:46

我在调试时反汇编了一下,发现用的是eax寄存器,这个寄存器至少是32bit的吧,那这结果就不对了??

支持(0) 反对(0) 没出没 | 园豆:8 (初学一级) | 2013-03-30 09:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册