1个回答
展开全部
选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
;
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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询