unsigned char a=0xd3; a|=0x1f;计算后a的值是多少?
4个回答
展开全部
调试了好久终于知道为什么了.
我们先看看编译器是如何编译的
not是按位取反
sar是右移 0x6也就是右移六位
但是我怎么算都是不会是fd, 这就很气╭(╯^╰)╮
然后我把代码改了下
12345678910#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
展开全部
转成二进制计算
0xd3=b1101 0011
0x1f=b0001 1111
按位或,只有两个对应位都是0,结果才是0
于是a值是b1101 1111
也就是0xdf
0xd3=b1101 0011
0x1f=b0001 1111
按位或,只有两个对应位都是0,结果才是0
于是a值是b1101 1111
也就是0xdf
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
unsigned char a=0xd3; a|=0x1f;计算后a的值是
0xdf
0xdf
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询