按位“与”、“或”和“非”运算是C/C++中标准运算符,不需要另外编写函数。
创新互联建站专注为客户提供全方位的互联网综合服务,包含不限于成都网站设计、网站制作、外贸营销网站建设、宁阳网络推广、小程序制作、宁阳网络营销、宁阳企业策划、宁阳品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联建站为所有大学生创业者提供宁阳建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com
与运算: c = a b;
或运算: c = a | b;
非运算: ~a;
非运算: ~b
另外,!是逻辑运算符,对于a,如果a 为 0,!a = 1,如果a 不为 0,则!a = 0。
C语言逻辑或与非用于逻辑运算,可以在一条语句中同时出现,但还有优先级的限制。
基本应用:
逻辑与,符号为“”,只有两个操作数都是真,结果才是真。逻辑或,是逻辑运算符,符号是“||”。表示当两个条件中有任一个条件满足,“逻辑或”的运算结果就为“真”。“!”(逻辑非)逻辑运算符。“逻辑非”就是指本来值的反值。
优先级:
C语言中,运算符的运算优先级共分为15 级。1 级最高,15 级最低。逻辑与运算符 13级“”逻辑与运算符。逻辑或运算符 14 级,“ || ”逻辑或运算符。逻辑否“!”单目/一元运算 3级。因此优先级为:逻辑非高于逻辑与高于逻辑非。
运算方向:
在C语言中,只有4个运算符规定了运算方向,它们是、| |、条件运算符及赋值运算符。、| |都是先计算左边表达式的值,当左边表达式的值能确定整个表达式的值时,就不再计算右边表达式的值。如 a = 0 b; 运算符的左边位0,则右边表达式b就不再判断。
扩展资料:
相关规则及应用:
1、逻辑运算符:a=1,b=1;a||b-1;因为a=1为真值,所以不管b-1是不是真值,总的表达式一定为真值,这时后面的表达式就不会再计算了。
2、短路原则:
在逻辑表达式的求解过程中,任何时候只要逻辑表达式的值已经可以确定,则求解过程不再进行,求解结束。表达式中优先级最低的逻辑运算符,以这些运算符为准将整个逻辑表达式分为几个计算部分。最左边一个计算部分开始,按照算术运算、关系运算和逻辑运算的规则计算该部分的值。
每计算完一个部分就与该部分右边紧靠着的逻辑运算符根据真值表进行逻辑值判断。如果已经能够判断出整个逻辑表达式的值则停止其后的所有计算;只有当整个逻辑表达式的值还不能确定的情况下才进行下一个计算部分的计算。
参考资料来源:百度百科-逻辑与
参考资料来源:百度百科-逻辑或
参考资料来源:百度百科-逻辑非
参考资料来源:百度百科-C语言运算符
C语言中的与、或、非是C语言的逻辑运算符。
1、逻辑与
在C语言中逻辑与用表示。
举例:ab(其中a、b都代表一个条件)
如果a和b都为真,则结果为真,如果a和b中有一个条件为假,则结果为假。
2、逻辑或
在C语言中逻辑或用||表示。
举例:a||b(其中a、b都代表一个条件)
如果a和b有一个或以上为真,则结果为真,二者都为假时,结果为假。
3、逻辑非
在C语言中逻辑非用!表示。
举例:!a(a代表一个条件)
如果a为假,则!a为真,如果a为真,则!a为假。
扩展资料
在C 语言中的逻辑运算符及优先级:
一元:!(逻辑非)。
二元:(逻辑与)、||(逻辑或)。
以上三种逻辑运算符中,逻辑非 ! 的优先级最高,逻辑与 次之,逻辑或 || 优先级最低。即算术、逻辑、赋值运算符的优先级顺序为:
逻辑非 ! 算术 逻辑与 、逻辑或 || 赋值=
程序代码如下:
#include
"stdio.h"
#include
"stdlib.h"
int
main()
{
file
*fp=fopen("f:\\number.in","r");
char
str[9]={'\0'};
fgets(str,10,fp);
int
a,b,c;
a=(str[4]-48)*100+(str[3]-48)*10+(str[2]-48);
b=(str[6]-48)*100+(str[5]-48)*10+(str[7]-48);
c=str[8]-48;
file
*fp_2=fopen("f:\\number.out","w");
fprintf(fp_2,"%d",a+b+c);
return
0;
}
说明:定义输出和输入文件在f盘目录下,利用读入字符串函数fgets从文件中读入字符串放入字符数组str中,然后定义三个整型,利用字符和数字之间acsii码的关系将字符转换成整型,最后输出到文件。
#include stdio.h
#include string.h
#include stdlib.h
char *or(char *ch1,char *ch2,int isr)
/*
ch1和ch2是要参与or运算的两个操作数,isr用于确定运算结果的保存位置,若为0则通过malloc()
函数分配新的空间保存结果,若为非0值则结果将覆盖掉ch1和ch2中较长的那一个
*/
{
char *ort=NULL,*pl,*ps;
int i=0;
size_t len;
if (strlen(ch1)=strlen(ch2)) {
pl=ch1;
ps=ch2;
}
else
{
pl=ch2;
ps=ch1;
}
i=(len=strlen(pl))-strlen(ps);
if (isr) {
ort=pl;
for (pl+=i;*pl;pl++,ps++) {
*pl=*pl=='1'||*ps=='1'?'1':'0';
}
}
else
{
if((ort=malloc((len+1)*sizeof(char)))==NULL) return NULL;
strncpy(ort,pl,i);
for (pl+=i; *pl; pl++,ps++)
{
ort[i++]=*pl=='1'||*ps=='1'?'1':'0';
}
ort[i]='\0';
}
return ort;
}
char *not(char *ch,int isr)
/*
ch是要参与not运算的操作数,isr用于确定运算结果的保存位置,若为0则通过malloc()
函数分配新的空间保存结果,若为非0值则结果将覆盖掉ch
*/
{
int i;
char *ort;
if (!isr) {
if ((ort=calloc(strlen(ch)+1,sizeof(char)))==NULL) return NULL;
for (i = 0; ch[i]; i++) ort[i]=ch[i]=='1'?'0':'1';
}
else
for (ort=ch,i = 0; ch[i]; i++) {
ch[i]=ch[i]=='1'?'0':'1';
}
return ort;
}
int main(int argc, char* argv[])
{
char a[]="101010",b[]="10101",*p;
puts(or(a,b,1));
puts(not(b,1));
return 0;
}