异或,与,或运算_c语言异或运算怎么算

异或,与,或运算_c语言异或运算怎么算1.与运算(&)参加运算的两个数据,按二进制位进行“与”运算

1.与运算(&)

参加运算的两个数据,按二进制位进行“”运算。

运算规则:0&0=0;   0&1=0;    1&0=0;     1&1=1;

       即:两位同时为“1”,结果才为“1”,否则为0

例如:3&5  即 0000 0011 & 0000 0101 = 0000 0001   因此,3&5的值得1。

例如:9&5  即 0000 1001 (9的二进制补码)&00000101 (5的二进制补码) =00000001 (1的二进制补码)可见9&5=1。

2.或运算(|)

 

参加运算的两个对象,按二进制位进行“”运算。

 

运算规则:0|0=0;   0|1=1;   1|0=1;    1|1=1;

 

   即 :参加运算的两个对象只要有一个为1,其值为1。

 

例如:3|5 即 0000 0011 | 0000 0101 = 0000 0111   因此,3|5的值得7。 

例如:9|5可写算式如下: 00001001|00000101 =00001101 (十进制为13)可见9|5=13

3.异或运算(^)

 

参加运算的两个数据,按二进制位进行“异或”运算。

 

运算规则:0^0=0;   0^1=1;   1^0=1;   1^1=0;

  即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。

 

例如:9^5可写成算式如下: 00001001^00000101=00001100 (十进制为12)可见9^5=12  


例题:1073. 多选题常见计分法(20)-PAT乙级真题

分析:此题00001代表a正确,00010代表b正确,依次类推,记录答案,巧妙地用了与或异或运算

题解:

#include<iostream> #include<vector> #include<cmath> using namespace std; int main(){ int n,m,optnum,truenum,temp,maxcnt=0; int hash[]={1,2,4,8,16},opt[1010][110]={0}; char c; cin>>n>>m; vector<int>fullscore(m),trueopt(m); vector<vector<int> > cnt(m,vector<int>(5));//vector二维数组 for(int i=0;i<m;i++){ cin>>fullscore[i]>>optnum>>truenum; for(int j=0;j<truenum;j++){ scanf(" %c",&c); trueopt[i]+=hash[c-'a']; } } for(int i=0;i<n;i++){ double grade=0; for(int j=0;j<m;j++){ getchar(); scanf("(%d",&temp); for(int k=0;k<temp;k++){ scanf(" %c)",&c);//此处输入若没有括号则不读入 opt[i][j]+=hash[c-'a']; } int el =opt[i][j]^trueopt[j]; if(el){ if((opt[i][j]|trueopt[j])==trueopt[j]){ grade+=fullscore[j]*1.0/2; } if(el){ for(int k=0;k<5;k++) if(el&hash[k])cnt[j][k]++;//i代表第几个人,j代表第几个题,k代表第几个选项 } } else{grade+=fullscore[j]; } } printf("%.1f\n",grade); } for(int i=0;i<m;i++) for(int j=0;j<5;j++) maxcnt=maxcnt>cnt[i][j]?maxcnt:cnt[i][j]; if(maxcnt==0){ printf("Too simple\n"); } else { for(int i=0;i<m;i++){ for(int j=0;j<cnt[i].size();j++){ if(maxcnt==cnt[i][j])//输出错得最多的题 printf("%d %d-%c\n",maxcnt,i+1,'a'+j); } } } return 0; } 

 

今天的文章
异或,与,或运算_c语言异或运算怎么算分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/59696.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注