#include<stdio.h> int main(int x,int y,int ans){ ans=0; scanf("%d%d",&x,&y); for(int i=(x<y?x:y)+1;i<(x>y?x:y);i++) if(i&1) ans+=i; printf("%d",ans); }
写的多此一举
这样理解起来可能不太方便,三目太多。
``` i&1这是什么意思啊
i转成二进制和1去与
为什么要写成这种形式呢?
如果i为奇数,那么由补码表示的i的机器数的最后一位一定为1; 0和0进行与运算结果为0;0和1进行与运算结果为1;1和1进行与运算结果为1; 即,奇数和1进行按位与运算,结果值为1;偶数和1进行按位与运算,结果值为0.
不是,没人看出来你0和1说错了吗(挠头)
写的多此一举
这样理解起来可能不太方便,三目太多。
```
i&1这是什么意思啊
i转成二进制和1去与
为什么要写成这种形式呢?
如果i为奇数,那么由补码表示的i的机器数的最后一位一定为1;
0和0进行与运算结果为0;0和1进行与运算结果为1;1和1进行与运算结果为1;
即,奇数和1进行按位与运算,结果值为1;偶数和1进行按位与运算,结果值为0.
不是,没人看出来你0和1说错了吗(挠头)