2025-11-20 05:20:37
第一段:C里的左移符号<<是把数字的各位往左推,比如5变成1010就是5<<1,相当于乘2。C++里的-=-就是先减再赋值,比如a-=5等于a=a-5。左移位数越多结果越大,但超过位数会丢失数据。复合运算符能让代码更简洁,执行顺序先算后赋值。
第二段:左移本质是二进制乘法,比如8(1000)左移3位变成64(1000000),验证数据时发现确实等于原数乘以2的移位数次方。复合运算符设计时考虑了效率,测试用a=10,执行a-=3后结果7,和a=a-3完全一致。但要注意左移超过位数会截断,比如8位系统左移4位8会变0,这和数学乘法不同。运算符优化让代码更短小,比如用a <<=1代替a=a2,但负数左移行为特殊,需要额外注意。
本题链接: