C语言问题。

C语言问题。第三题... C语言问题。第三题 展开
 我来答
百度网友318462e
2018-06-30 · TA获得超过1519个赞
知道小有建树答主
回答量:757
采纳率:71%
帮助的人:575万
展开全部
选A, 0333

x=064是八进制表示的数字,展开表示成二进制是 000_110_100,因为x是字符型,所以取8bit,即x= 0011_0100(二进制),按八进制每3bit分割表示 是 x = 00_110_100(二进制)
x = ~x ^ x << 2 & x; 按运算符优先级,实际计算顺序为: ~( x ^ (x<<2) & x )
~ 是按位取反运算,^是异或运算,<<是移位运算,&是按位与运算; 下划线_是为了分割4bit看起来方便,C语言不支持这个符号,用的时候删掉。
故计算式实际是 ~ ( 00_110_100 ^ 11_010_000 & 00_110_100 )
前两个操作数先计算异或,按位一对一做异或,规则是:相同为0,不同为1。则上式第一步后变为
~ ( 11_100_100 & 00_110_100 )
再按位一对一做与操作,结果为: ~ ( 00_100_100 )
再做最后一步取非,结果为: 11_011_011,即八进制的 333。
但是只写333是十进制的333,八进制应该写成 0333,所以是A答案才对。

//////////////////////////// 测试程序如下:
#include <stdio.h>
int main(void) {
unsigned char x = 064;
x = ~x ^ x << 2 & x;
printf("%o, %x", x, x);
return 0;
}
// 输出 333, db
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式