以下代码: unsigned char a=0xa5; unsigned char b=~a >>1+2+3; 求b等于多少? 请写出具体过程

 我来答
lklkhn
2017-04-30 · TA获得超过171个赞
知道小有建树答主
回答量:174
采纳率:100%
帮助的人:70万
展开全部

调试了好久终于知道为什么了.

我们先看看编译器是如何编译的

not是按位取反

sar是右移 0x6也就是右移六位

但是我怎么算都是不会是fd, 这就很气╭(╯^╰)╮

然后我把代码改了下

#include "stdio.h"

int main(int argc, char const *argv[]) {
    unsigned char a = 0xa5;
    printf ( "%0x", ~a );   //显示ffffff5a
    unsigned char b = (~a) >> ( 1 + 2 + 3);

    printf ( "\n%0x  %0x", b, 0xffffff5a >> 6  ); //显示fd  3fffffd
    return 0;
}

这下就很明了了.

一开始编译器把无符号char类型的a升为32位的类型(比如int?) 进行了按位取反得到的结果ffffff5a, 然后右移六位再降为八位的无符号char类型, 也就是最后八位0xfd赋值给b

呼, 给个采纳好么QwQ

White_MouseYBZ
2017-04-30 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6591万
展开全部
b==0xfd。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
三网充值折扣
2018-04-22
知道答主
回答量:12
采纳率:0%
帮助的人:5932
展开全部
真不知道为什么要这样设计,而且还出这样的题目很明显如果从C语言的角度应该汇编代码不应该放在eax里面的,应该要放在al里面的,这样才符合逻辑,不然就是设计上面的bug,看了汇编语言感觉太坑了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式