C语言二级题目求详解

有以下程序
void main()
{int x=3,y=2,z=1;
printf("%d\n",x/y&&~z);}
程序运行后的输出结果是()
A 3 B 2 C 1 D 0

C

追问

可以告诉我解答过程吗,我要知道为什么

追答

我只知道,x/y取整数为1.~是位运算取反的意思,就是1为0. 0为1

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-05-25
void main()
{int x=3,y=2,z=1;
printf("%d\n",x/y&&~z);} x/y=1 ~z=0 所以结果为 0

答案 D
第2个回答  2014-05-25
答案选C.1
第3个回答  2014-05-25
*2 或 <<1 都对。因为计算机是二进制的,所有的位运算操作:&、|、^、<<、>> 都是就二进制而言的。<< 表示左移位,>> 表示右移位。以十进制加以说明,如:12345 左移一位,就是 123450,多出来的位以零填充;右移一位就是 1234,那个 5 就丢失了。十进制大家已经习以为常,很明显可以看出来,左移一位增大十倍,右移一位减小十倍(忽略丢失的最低位)。在编程语言中,数值是这样存储的:不管该数值以几进制表示,它在计算机硬件中存储都是二进制,进行位运算都是二进制。如果你将一个数值左移一位, 是将它的二进制移一位。如 1 << 1 变为 10(二进制 10 等于十进制 2),1 << 2 变为 100(二进制 100 等于十进制 4),4 << 2 即二进制的 100 << 2 等于 10000(二进制 100 等于十进制 32),十进制的结论同样可以套用在二进制上,左移一位后数值就增大 2 倍,右移则减小到 1/2。
124(1111100) << 1 = 248(11111000)
相似回答