复合赋值 x-=y、x/=y、x<<=y等问题

C语言复合赋值运算符的理解与示例解析
本文通过一个C语言示例代码探讨了复合赋值运算符如`x+=y`, `x-=y`, `x*=y`, `x/=y`, `x%=y`, `x<<=y`, `x>>=y`, `x^=y`的用法,并解释了在特定输入下可能产生的结果。管理员的解释指出,每个表达式的结果会保留到下一个表达式中,帮助理解复合赋值运算符的工作原理。" 122760430,11809176,QQ音乐Android增量编译优化,"['移动开发', 'android', '架构', '编译优化']
正在看一本《C++从入门到实践》(秦广军 等编著 清华大学出版社 ISDN 978-7-302-20026-0)

其中,
 

关于 4.5节《赋值》,示例4-6 引发的问题 (第58页)

本人对原来的代码作了一点点增加:


#include "stdafx.h"
#include <iostream.h>

int main(void)
{
        int x=0;
        int y=0;
        cin>>x;
        cin>>y;

        cout<<"x+y="<<(x+=y)<<endl;
        cout<<"x-y="<<(x-=y)<<endl;
        cout<<"x*y="<<(x*=y)<<endl;
        cout<<"x/y="<<(x/=y)<<endl;
        cout<<"x%y="<<(x%=y)<<endl;
        cout<<"x<<y="<<(x<<=y)<<endl;
        cout<<"x>>y="<<(x>>=y)<<endl;
        cout<<"x^y="<<(x^=y)<<endl;
        cout<<"x=y="<<(x=y=100)<<endl;
        return 0;
}


本人输入 8 和 4,得出的结果非常奇怪,为:

8
4
x+y=12
x-y=8
x*y=32
x/y=8
x%y=0
x<<y=0
x>>y=0

x^y=4
x=y=100

请问为什么跟期望值不一样呢?

 

====================================================================

 

本书的管理员在此热情回复:

我看了程序,没有觉得不正常地方。我根据程序简单的说一下。

        cin>>x;                 x=8
        cin>>y;                 y=4

        cout<<"x+y="<<(x+=y)<<endl;   x=x+y=8+4=12
        cout<<"x-y="<<(x-=y)<<endl;    x=x-y=12-4=8
        cout<<"x*y="<<(x*=y)<<endl;   x=x*y=8*4=32
        cout<<"x/y="<<(x/=y)<<endl;    x=x/y=32/4=8
        cout<<"x%y="<<(x%=y)<<endl;   x=x%y=8%4=0
        cout<<"x<<y="<<(x<<=y)<<endl;  x=x<<y=0<<4=0
        cout<<"x>>y="<<(x>>=y)<<endl;  x=x>>y=0>>4=0
        cout<<"x^y="<<(x^=y)<<endl;    x=x^y=0^4=4
        cout<<"x=y="<<(x=y=100)<<endl; x=y=100


如果你对其中那一个部分不清楚,你提出来。我具体给你说一下。

=====================================================================

所以,这问题只是我一时不明白 程序在运行过程中,保留前一表达式x所得到的值,投入到下一表达式中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值