以下代码: unsigned char a=0xa5; unsigned char b=~a >>1+2+3; 求b等于多少? 请写出具体过程
答案:3 悬赏:50 手机版
解决时间 2021-04-07 12:02
- 提问者网友:
- 2021-04-06 21:54
以下代码: unsigned char a=0xa5; unsigned char b=~a >>1+2+3; 求b等于多少? 请写出具体过程
最佳答案
- 五星知识达人网友:鱼忧
- 2021-04-06 23:14
调试了好久终于知道为什么了.
我们先看看编译器是如何编译的
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 ( "
%0x %0x", b, 0xffffff5a >> 6 ); //显示fd 3fffffd
return 0;
}
这下就很明了了.
一开始编译器把无符号char类型的a升为32位的类型(比如int?) 进行了按位取反得到的结果ffffff5a, 然后右移六位再降为八位的无符号char类型, 也就是最后八位0xfd赋值给b
呼, 给个采纳好么QwQ
我们先看看编译器是如何编译的
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 ( "
%0x %0x", b, 0xffffff5a >> 6 ); //显示fd 3fffffd
return 0;
}
这下就很明了了.
一开始编译器把无符号char类型的a升为32位的类型(比如int?) 进行了按位取反得到的结果ffffff5a, 然后右移六位再降为八位的无符号char类型, 也就是最后八位0xfd赋值给b
呼, 给个采纳好么QwQ
全部回答
- 1楼网友:七十二街
- 2021-04-07 01:05
真不知道为什么要这样设计,而且还出这样的题目很明显如果从C语言的角度应该汇编代码不应该放在eax里面的,应该要放在al里面的,这样才符合逻辑,不然就是设计上面的bug,看了汇编语言感觉太坑了
- 2楼网友:野味小生
- 2021-04-06 23:29
b==0xfd。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯