title: 问几个C语言的问题小弟是初学，有些题不懂，望各位大哥帮忙解决一下 
desc: 小弟是初学，有些题不懂，望各位大哥帮忙解决一下！
  
  1、设有如下段：
  int x=2002, y=2003;
  printf("%d\n",(x,y));
  
  输出结果是2003，为什么？？
  
  
  2、设变量x为float型且已赋值，则以下语句中能将x中的数值保留到小数点后两位，并将第三位四舍五入的是
     A）x=x*100+0.5/100.0; B）x=(x*100+0.5)/100.0;
     C）x=(int)(x*100+0.5)/100.0; D）x=(x/100+0.5)*100.0;
  
  这题怎么解决，不会，讲讲思小弟是初学，有些题不懂，望各位大哥帮忙解决一下！
  
  1、设有如下段：
  int x=2002, y=2003;
  printf("%d\n",(x,y));
  
  输出结果是2003，为什么？？
  
  
  2、设变量x为float型且已赋值，则以下语句中能将x中的数值保留到小数点后两位，并将第三位四舍五入的是
     A）x=x*100+0.5/100.0; B）x=(x*100+0.5)/100.0;
     C）x=(int)(x*100+0.5)/100.0; D）x=(x/100+0.5)*100.0;
  
  这题怎么解决，不会，讲讲思想！
  
  
  3、有以下程序
  main()
  { int x=3, y=2, z=1;
  printf("%d\n",x/y&~z);
  }
  程序运行后的输出结果是
  
  
  答案是0，为什么啊，我算出来是1哦
  
  
  
answer: 第一题：括号内的表达式是逗号表达式。逗号表达式自左向右计算各个逗号间隔开来的表达式的值，并且返回最右的表达式。你这个题目中的最右表达式是y，而y=2003，所以最后逗号表达式的值是2003。
  第二题：不严格地说，可以选C，其理由前面第一位回答者已经说得很清楚了，我就不重复了。但严格地说，这四个答案都是错的。因为在答案C中，虽然理论上程序能够进行四舍五入，但由于计算机不是人，对（int）(x*100+0.5)这个表达式，计算机会损失精度，例如初始状态下x=100.015，按四舍五入原则应该得到计算后x=100.02，但实际上，在大部分计算机编译环境下（例如在++中），x会得到100.01。
  第三题：答案是0。因为x/y=3/2的结果是1；~z=~(1)。“~”这个运算符是进行二进制求反，假定机器精度是8位，那么二进制1就是00000001，那么~(1)就是11111110（相当于十进制的-2）。而&运算是二进制的“与”运算，只有两个操作数的对应位都为1的时候，结果才为1，否则为0。显然，00000001和11111110，没有任何一个对应位是同时为1的。所以，运算结果为0。因此x/y&~z=1&~(1)=1&(-2)=0