static void Main(string[] args)
{
int a, b;
a = b = 1;
b += (a / b++);
Console.WriteLine("{0},{1}",a,b);
}输出 1,2何解?
解决方案 »
- 怎样判断imagelist中的图片和picturebox中的图片是不是同张
- C#发展快10年了,与C++比较, 有那些工作要做.
- 我会用for不会用foreach郁闷,个位大虾帮帮忙啦!
- Dundas 大数据量和 x轴的时间精度以及点击滚动条宽度忽宽忽窄问题
- 再把子表的字段邦定到textbox,
- winform 小问题
- 问大家一个问题那。
- 请问Excel或者DBF可不可以用OleDb连接用Create Table创建表然后用SQL语句Update?
- WPF学习 扫雷小游戏 开发
- C#:如何使用js文件中变量
- 远程获取目录下文件信息并下载的问题
- 用如下代码获取mac地址。为什么有时候mac会变化(急,谢谢)?
b += (a / b++); 可以理解为 b=b+(1/1);
{
int a, b;
a = b = 1;
b += (a / b);
Console.WriteLine("{0},{1}",a,b);
}
static void Main(string[] args)
{
int a, b;
a = b = 1;
b += (a / ++b);
Console.WriteLine("{0},{1}",a,b); }
double a, b;
a = b = 1;
b += (a / ++b);
int i=8;
(i++)+=(i++)//i=?
(i++)+=(++i)//i=?
(++i)+=(i++)//i=?
(++i)+=(++i)//i=?
挺恶心的。呵呵
赋值号左边必须是变量、属性或索引器
vc中编译能通过而且,
int a, b;
a = b = 1;
b += (a / b++);
cout<<a<<" "<<b<<endl;在vc中显示 1 3
岂不奇怪?
每种编译器的计算都稍有区别吧
vc上是不是b=b+(a/b++)计算时=号右边第一个b的值取的是b++后的值为2就成了b=2+1了
{
int a, b; //a=0,b=0
a = b = 1; // a=1,b=1
b = (a / b++); //a=1 ,b=1
b =b + 1; //b =2
Console.WriteLine("{0},{1}",a,b);
}
其中这句 b =(a/b++)的过程为b++ //当前值为1 ,同时在栈中另一个寄存器生成 临时值2供下次使用;
a/b //用的是当前值 1;
b= a/b // a=1,b=1,所以商为1 ,结果赋给b,同时 临时值 2 销毁;
b=b+ 1 // b自加 ,步长 为1 ,结果 为 2;
每种编译器策略不同,但 C# 和 Java应该是一样的.
这题的关键是两个句子:
a = b = 1;
b += (a / b++);
当执行完 (a = b = 1;)后 a和b的值都为1;
(b += (a / b++);)相当于b= b+(a / b++),
这一句的a没有改变,a的值依然为1,第一个b的值为1,赋值语句最右的(b++)先取b=1进行式子的计算,
所以最后b=1+(1/1)=1+1;
所以a=1 b=2;
如果是b += (a / ++b),b=b+(a/++b)=1+(1/2)=1+0=1输出结果就是1,1了.
其实这里就是考是累加后参考运算还是运算后值累加而已
a=+2先赋值后运算
++a先运算后赋值
a++先赋值后运算