简单例子,拿下操作符

话不多说,直接上货!!!


目录

1.算数操作符

+ :求和

 - :做差

* :求乘积 

 / :求商省余

 % :取余略商

2.移位操作符

 左移操作符: 

正数:

负数:

右移操作符:

3.位操作符

&  两1取1 有0取0

| 有1取1,无1取0

 ^ 相同为0 相异为1

4.赋值操作符 

 5.单目操作符

! 逻辑反操作

&  取地址

sizeof  求类型字节大小

~ 按位取反

++和--

*  间接访问操作符

(类型)  强制类型转换 

6.关系操作符

7.逻辑操作符

8.条件操作符

9.逗号表达式

10.下标引用、函数调用和结构成员

1.[ ] 下标引用操作符

2.( ) 函数调用操作符

3.访问一个结构的成员


1.算数操作符

+    -    *   /    %

+ :求和

#include <stdio.h>
int main()
{
	int a = 5;
	int b = 5;
	int c = 0;
	c = a + b;
	printf("%d\n",c);
	return 0;
}

 - :做差

#include <stdio.h>
int main()
{
	int a = 8;
	int b = 5;
	int c = 0;
	c = a - b;
	printf("%d\n",c);
	return 0;
}

* :求乘积 

#include <stdio.h>
int main()
{
	int a = 8;
	int b = 5;
	int c = 0;
	c = a*b;
	printf("%d\n",c);
	return 0;
}

 / :求商省余

#include <stdio.h>
int main()
{
	int a = 8;
	int b = 5;
	int c = 0;
	c = a/b;
	printf("%d\n",c);
	return 0;
}

 % :取余略商

#include <stdio.h>
int main()
{
	int a = 8;
	int b = 5;
	int c = 0;
	c = a%b;
	printf("%d\n",c);
	return 0;
}

注: % 操作符的两个操作数必须为整数。

2.移位操作符

<< 左移操作符

>> 右移操作符

注:移动的是数字二进制的补码,用原码输出        原码->反码符号位不变

 左移操作符: 

左边抛弃、右边补0

正数:

#include <stdio.h>
int main()
{
	int a = 3;
	int b=a << 1;
	printf("%d\n",b);
	return 0;
}

 分析:

负数:

#include <stdio.h>
int main()
{
	int a = -3;
	int b=a << 1;
	printf("%d\n",b);
	return 0;
}

分析:

右移操作符:

编译器决定:

1. 逻辑移位: 左边用0填充,右边丢弃

2. 算术移位 :左边用原该值的符号位填充,右边丢弃

对于正数来说,无论是逻辑移位还是算数移位,因为正数的符号位为0,两种移位对正数的效果相同,这里我们主要来分析负数。

 我的编译器进行了 算术移位

注:对于移位运算符,不要移动负数位,这个是标准未定义的。

int num = 3;
num>>-1;      //不支持

3.位操作符

&   按位与

|    按位或

^   按位异或

注:他们的操作数必须是整数,都是直接对数的二进制补码进行操作。

&  两1取1 有0取0

#include <stdio.h>
int main()
{
	int a = -3;
	int b = 5;
	int c = a&b;
	printf("%d\n",c);
	return 0;
}

| 有1取1,无1取0

#include <stdio.h>
int main()
{
	int a = -3;
	int b = 5;
	int c = a|b;
	printf("%d\n",c);
	return 0;
}

 ^ 相同为0 相异为1

#include <stdio.h>
int main()
{
	int a = -3;
	int b = 5;
	int c = a ^ b;
	printf("%d\n", c);
	return 0;
}

4.赋值操作符 

+=    -=    *=    /=    %=    >>=    <<=    &=    |=    ^=

这都是复合运算符

栗子:

	int a = -3;
	int b = 5;
	a = a + b;     //这里a结果为2

可以改成

	int a = -3;
	int b = 5;
	a += b;

其他运算符以此为例,可类推。 

 5.单目操作符

! 逻辑反操作

int i=0;
scanf("%d",&i);
if(i!=3)              //这里是 i不等于3 
{
    printf("hr\n");  
}

	printf("%d\n", !2);   //输出0  非真为假0表示
	printf("%d\n", !0);   //输出1  非假为真1表示

+    -  表示数的正负,我们省略

&  取地址

#include <stdio.h>
int main()
{
	int b = 5;
	printf("%p\n",&b);        //取b的地址
	return 0;
}

sizeof  求类型字节大小

#include <stdio.h>
int main()
{
	int a = -10;
	printf("%d\n", sizeof(a));
	printf("%d\n", sizeof(int));
	printf("%d\n", sizeof a);       //a不加括号可行
    //printf("%d\n",sizeof int);     //类型不带括号是错误的写法
	return 0;
}

 sizeof和数组:

include <stdio.h>
void test1(int arr[])
{
 printf("%d\n", sizeof(arr));//  传入的是数组的首地址,大小为4/8
}
void test2(char ch[])
{
 printf("%d\n", sizeof(ch));//  传入的依旧是首地址,本质为指针,指针的大小4/8
}
int main()
{
 int arr[10] = {0};
 char ch[10] = {0};
 printf("%d\n", sizeof(arr));//  输出的是10个整型的字节大小  40
 printf("%d\n", sizeof(ch));//  输出的是10个字符类型的字节大小  10
 test1(arr);
 test2(ch);
 return 0;
}

~ 按位取反

按位取反是对一个数的二进制补码进行操作,0->1,1->0.

注:整个二进制值序列包括符号位也要进行取反

++和--

前置:

#include <stdio.h>
int main()
{
	int a = 10;
	int x = ++a;
	//先对a进行自增,然后对使用a,也就是表达式的值是a自增之后的值。x为11。
	int y = --a;
	//先对a进行自减,然后对使用a,也就是表达式的值是a自减之后的值。y为10;
	return 0;
}

后置:

#include <stdio.h>
int main()
{
	int a = 10;
	int x = a++;
	//先对a先使用,再增加,这样x的值是10;之后a变成11;
	int y = a--;
	//先对a先使用,再自减,这样y的值是11;之后a变成10;
	return 0;
}

*  间接访问操作符

#include <stdio.h>
int main()
{
	int a = -10;
	int* p = &a;
	*p = 5;                //可以直接访问a地址里的内容,并进行操作
	printf("%d\n",a);
	return 0;
}

(类型)  强制类型转换 

栗子:

#include <stdio.h>
int main()
{
	int a = 50;
	int b = 14;
	double ave = 0;
	ave = a / b;              //未强制转换
	printf("%lf\n",ave);
	return 0;
}

	ave = (double)a / b;

6.关系操作符

>     >=     <      <=     != 用于测试“不相等”          ==  用于测试“相等”

注意小细节"=="和"="要看清楚,是坑

7.逻辑操作符

&&     逻辑与         左边为假,则不继续执行

||        逻辑或         左边为真,则不继续执行

#include <stdio.h>
int main()
{
	int a = 5;
	if (a > 6 && a < 8)     //  &&左侧为假,不继续执行
	{
		printf("AA\n");
	}
	else                     //直接执行else内的语句
		printf("BB\n");
	return 0;
}

#include <stdio.h>
int main()
{
	int a = 5;
	if (a > 1 || a < 3)        //  ||左侧为真,直接停止向右侧执行   无视右侧为假的条件
	{
		printf("AA\n");  
	}
	else
		printf("BB\n");
	return 0;
}

8.条件操作符

也叫三目操作符

exp1 ? exp2 : exp3

表达式1为真,计算表达式2

表达式1为假,计算表达式3

#include <stdio.h>
int main()
{
	int a = 10;
	int b = 20;
	int max = 0;
	max = (a>b?a:b);
	printf("%d\n",max);
	return 0;
}

9.逗号表达式

exp1, exp2, exp3, …expN

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

#include <stdio.h>
int main()
{
	int a = 1;
	int b = 2;
	int c = (a > b, a = b + 10, a, b = a + 1);
	printf("%d\n", c);
	return 0;
}

 自左向右依次进行,无关真假,结果是最后一个表达式的果

10.下标引用、函数调用和结构成员

1.[ ] 下标引用操作符

操作数:一个数组名 + 一个索引值

#include <stdio.h>
int main()
{
	int arr[10] = { 1, 2, 3, 4, 5, 6, 7 };
	printf("%d\n", arr[2]);
	return 0;
}

 注:下标从0开始,因此arr数组中3的下标是2

2.( ) 函数调用操作符

#include <stdio.h>
void test()
{
	printf("hehe\n");
}
int main()
{
	test();            //()为函数调用操作符。
	return 0;
}

3.访问一个结构的成员

.           结构体.成员名

->         结构体指针->成员名

#include <stdio.h>

struct book
{
	int price;
	char name[20];
};

int main()
{
	struct book b1 = {30,"c语言"};
	b1.price = 50;
	printf("%d\n",b1.price);
	return 0;
}

取地址,用指针的话:

	struct book*p = &b1;
	printf("%s\n",p->name);


 临近考试了,有些忙,更新会延期,但绝不会断,博客就相当于做笔记,会一直整理下去!!

        

 

  • 12
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今年依旧去年春

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值