天天看点

C语言最全操作符详解,一文精通所有操作符!前言一、除号“/”二、"%"除法取余数三、左移操作符“<<”和右移操作符“>>”四、按位与“&”五、按位或“|”六、按位异或“^”七、赋值操作符“=”和复合赋值操作符八、逻辑非“!”九、&取地址操作符和*解引用操作符十、sizeof操作符十一、按位取反操作符“~”十二、强制类型转换操作符 (类型)十三、双目操作符:逻辑与&& 逻辑或||十四、三目操作符(条件操作符)十五、逗号表达式总结

文章目录

  • 前言
  • 一、除号“/”
  • 二、"%"除法取余数
  • 三、左移操作符“<<”和右移操作符“>>”
    • 1.左移操作符
    • 2.右移操作符
  • 四、按位与“&”
  • 五、按位或“|”
  • 六、按位异或“^”
  • 七、赋值操作符“=”和复合赋值操作符
    • 1.赋值操作符
    • 2.复合赋值操作符
  • 八、逻辑非“!”
  • 九、&取地址操作符和*解引用操作符
  • 十、sizeof操作符
  • 十一、按位取反操作符“~”
  • 十二、强制类型转换操作符 (类型)
  • 十三、双目操作符:逻辑与&& 逻辑或||
  • 十四、三目操作符(条件操作符)
  • 十五、逗号表达式
  • 总结

前言

提示:本文主要面向对象为C语言新人,文章覆盖了所有C语言的操作符,对于C语言已经有一定掌握的同学也可作为复习的材料,预祝学习愉快!

C语言最全操作符详解,一文精通所有操作符!前言一、除号“/”二、"%"除法取余数三、左移操作符“&lt;&lt;”和右移操作符“&gt;&gt;”四、按位与“&amp;”五、按位或“|”六、按位异或“^”七、赋值操作符“=”和复合赋值操作符八、逻辑非“!”九、&amp;取地址操作符和*解引用操作符十、sizeof操作符十一、按位取反操作符“~”十二、强制类型转换操作符 (类型)十三、双目操作符:逻辑与&amp;&amp; 逻辑或||十四、三目操作符(条件操作符)十五、逗号表达式总结

提示:以下是本篇文章正文内容,下面案例可供参考

一、除号“/”

除号作为C语言中最为简单的符号,也时常会有同学有着误区,对于“/”而言,除法操作中两边是整数,执行整数除法,除法操作中,两边有一边有浮点数,才执行浮点数除法。除法操作与操作数的类型无关

代码如下(示例):

#include<stdio.h>
int main()
{
	int ret1 = 9 / 2;
	double ret2 = 9 / 2;
	double ret3 = 9 / 2.0;
	printf("%d\n", ret1);//打印4
	printf("%lf\n", ret2);//打印4.000000
	printf("%lf\n", ret3);//打印4.500000
	return 0;
}
           

二、"%"除法取余数

以a%b为例,a/b=c…d 则a%b=d

代码如下(示例):

#include<stdio.h>
int main()
{
	int a = 9 % 2;// 9/2=4....1,a=1
	printf("%d", a);//打印出1
}
           

ps:%只能用于整型,其他类型不能使用

三、左移操作符“<<”和右移操作符“>>”

1.左移操作符

代码如下(示例):

#include<stdio.h>
int main()
{
	int a = 5;
	//a的原码:00000000000000000000000000000101,最前面的一个0表示它是正数,如果是1则表示负数
	//a的反码:00000000000000000000000000000101
	//a的补码:00000000000000000000000000000101
	int b = a << 1;//a向左移动1位,移动的是二进制位
	//a向左移动一位:00000000000000000000000000001010-----左边丢一位,右边补0
	//pow(2,3)+pow(2,1)=8+2=10=b
	//对于整数的二进制有三种表示形式:原码、反码、补码
	//正整数-原、反、补相同
	//负整数
	//原码-直接按照数字的正负写出的二进制序列
	//反码-原码的符号位不变,其他位按位取反得到
	//补码-反码+1
	int c = -1;
	//c的原码:10000000000000000000000000000001
	//c的反码:11111111111111111111111111111110//符号位不变,其他位,按位取反
	//c的补码:11111111111111111111111111111111//反码+1
	int d = c << 1;
	//d的补码:11111111111111111111111111111110
	//d的反码:11111111111111111111111111111101
	//d的原码:10000000000000000000000000000010-对应十进制-2
	printf("%d\n", a);
	printf("%d\n", b);//ps:这里a向左移1位得到b,a并没有移位赋值给a,a的值任然是5
	printf("%d\n", d);//在内存中储存的是补码,计算时,用的是原码
	return 0;
}
           

2.右移操作符

右移操作符分两类

1.逻辑右移-右边丢弃,左边补0

2.算数右移-右边丢弃,左边补符号位

代码如下(示例):

#include<stdio.h>
int main()
{
	int a = 5;
	//a的原码:00000000000000000000000000000101
	//a的反码:00000000000000000000000000000101
	//a的补码:00000000000000000000000000000101
	int b = a >> 1;
	printf("%d", b);//00000000000000000000000000000010-打印出2——对于正数,右移,算数和逻辑是一样的
	int c = -5;
	//c的原码:10000000000000000000000000000101
	//c的反码:11111111111111111111111111111010
	//c的补码:11111111111111111111111111111011
	int d = c >> 1;
	//d的补码:11111111111111111111111111111101(算数右移)或01111111111111111111111111111101(逻辑右移)
	printf("%d", d);//打印出d=-3原码为:10000000000000000000000000000011 
	//                      对应反码为:11111111111111111111111111111100 
	//                      对应补码为:11111111111111111111111111111101,说明当前编译器用的是算数右移 (大多数编译器都是算数右移)
}
           

四、按位与“&”

&:全1为1

代码如下(示例):

#include<stdio.h>
int main()
{
	int a = 3;
	int b = -2;
	//a的补码:00000000000000000000000000000011
	//b的原码:10000000000000000000000000000010
	//b的反码:11111111111111111111111111111101
	//b的补码:11111111111111111111111111111110
	int c = a & b;
	//11111111111111111111111111111110
	//00000000000000000000000000000011
	//按位与00000000000000000000000000000010=2
	//因为整数补码和原码一样,所以c=2
	printf("%d\n", c);
	return 0;
}
           

五、按位或“|”

|:有1为1

代码如下(示例):

#include<stdio.h>
int main()
{
	int a = 3;
	int b = -2;
	//a的补码:00000000000000000000000000000011
	//b的原码:10000000000000000000000000000010
	//b的反码:11111111111111111111111111111101
	//b的补码:11111111111111111111111111111110
	int c = a | b;
	//11111111111111111111111111111110
	//00000000000000000000000000000011
	//按位或得到补码:11111111111111111111111111111111
	//         反码:11111111111111111111111111111110
	//         原码:10000000000000000000000000000001=-1
	printf("%d\n", c);
	return 0;
}
           

六、按位异或“^”

^:相同为0,相异为1

代码如下(示例):

#include<stdio.h>
int main()
{
	int a = 3;
	int b = -2;
	//a的补码:00000000000000000000000000000011
	//b的原码:10000000000000000000000000000010
	//b的反码:11111111111111111111111111111101
	//b的补码:11111111111111111111111111111110
	int c = a ^ b;
	//11111111111111111111111111111110
	//00000000000000000000000000000011
	//按位异或得到补码:11111111111111111111111111111101
	//反码:11111111111111111111111111111100
	//原码:10000000000000000000000000000011=-3
	printf("%d\n", c);
	return 0;
}
           

七、赋值操作符“=”和复合赋值操作符

1.赋值操作符

赋值操作符“=”不能单单看作是等号,比如a=b,是要看成把b的值赋给a

代码如下(示例):

#include<stdio.h>
int main()
{
	int a = 10;
	int x = 0;
	int y = 20;
	a = x = y + 1;//连续赋值x=21,a=x=21,从右向左计算——最好拆开写
	printf("%d", a);
}
           

2.复合赋值操作符

复合赋值符+= -= *= /= >>= <<=等等

a+=b表示a=a+b,a * =b表示a=a * b

其他以此类推

八、逻辑非“!”

非0为真,默认1 非真为假,默认0,注意!!!:负数也是真

代码如下(示例):

#include<stdio.h>
int main()
{
	int a = 0;
	int b = !a;
	int c = -1;
	int d = !c;
	printf("b=%d,d=%d", b, d);//b=1,d=0
}
           

九、&取地址操作符和*解引用操作符

代码如下(示例):

#include<stdio.h>
int main()
{
	int a = 10;
	int*pa = &a; //int*是pa的类型,表示pa是指向a的整形指针变量,pa里存放a的地址
	printf("%d\n", *pa);//通过解引用操作符*打开pa的地址,换句话说*pa=a
	*pa = 2;
	printf("%d", a);//打印出2,可以通过*pa改变a的值
}
           

十、sizeof操作符

sizeof是操作符,不是函数。sizeof计算的是变量或类型创建变量的内存大小,和内存里存放什么数据没有关系!!!

代码如下(示例):

#include<stdio.h>
int main()
{
	char arr[10] = "abc";
	printf("%d\n", sizeof(arr));//计算整个数组的大小,该数组10个元素,每个元素1个字节,总大小=10*1=10
	printf("%d\n", strlen(arr));//计算的是字符串的长度,不包括\0,计算的是\0出现前的字符数
	int a = 10;
	printf("%d\n", sizeof(a));//a里面有一个元素,占四个字节1*4=4
	printf("%d\n", sizeof a);//因为sizeof不是函数,所以可以不带括号
	printf("%d\n", sizeof(int));//也是4
	//printf("%d\n", sizeof int);//这里是语法要求,int外的括号不能省
	return 0;
}
           

十一、按位取反操作符“~”

~所有位都取反,包括符号位

代码如下(示例):

#include<stdio.h>
int main()
{
	int a = 0;
	//00000000000000000000000000000000
	int b = ~a;
	//11111111111111111111111111111111 b的补码
	//11111111111111111111111111111110 b的反码
	//10000000000000000000000000000001 b的原码=-1
	printf("%d", b);//内存中存的是补码,打印时是原码
	return 0;
}
           

十二、强制类型转换操作符 (类型)

代码如下(示例):

#include<stdio.h>
int main()
{
	double a = 3.14;
	int b = (int)a;
	printf("%d", b);//打印出3
}
           

十三、双目操作符:逻辑与&& 逻辑或||

逻辑与&&:全真为真

逻辑或||: 一真为真

代码如下(示例):

#include<stdio.h>
int main()
{
	int a = 0;
	int b = 5;
	int c = a && b;
	int d = a || b;
	printf("%d\n", c);//0-全真为1,否则为0
	printf("%d\n", d);//1-有真为1,全假为0
	return 0;
}
           

十四、三目操作符(条件操作符)

三目操作符(条件操作符)

exp1?exp2:exp3

对语句1判断,为真则语句2,为假则语句3

代码如下(示例):

#include<stdio.h>
int main()
{
	int a = 3;
	int b = 5;
	int m = 0;
	m = (a > b ? a : b);
	printf("%d", m);//打印5,a>b不成立返回b
}
           

十五、逗号表达式

exp1,exp2,exp3,…

从左向右依次执行,整个表达式结果是最后一个表达式结果

代码如下(示例):

#include<stdio.h>
int main()
{
	int a = 1, b = 2;
	int c = (a > b, a = b + 10, a, b = a + 1);//a>b为真,a=b+10=12,a不做变换,b=a+1=13
	printf("%d", c);//13
}
           

总结

本文介绍了十五种C语言常用操作符,作为C语言编程的最基础工具,读者需要仔细研读,将来才能在C语言编程中得心应手,最后祝读者们学业有成、天天进步!

C语言最全操作符详解,一文精通所有操作符!前言一、除号“/”二、"%"除法取余数三、左移操作符“&lt;&lt;”和右移操作符“&gt;&gt;”四、按位与“&amp;”五、按位或“|”六、按位异或“^”七、赋值操作符“=”和复合赋值操作符八、逻辑非“!”九、&amp;取地址操作符和*解引用操作符十、sizeof操作符十一、按位取反操作符“~”十二、强制类型转换操作符 (类型)十三、双目操作符:逻辑与&amp;&amp; 逻辑或||十四、三目操作符(条件操作符)十五、逗号表达式总结

继续阅读