[C]操作符总结

C语言中的操作符较多,且灵活,若能熟练使用,必成大器!

如下开始简介

1.算术操作符 **

算术操作符有+、-、*、/、%(整数求余)

 

(1)它们的结合性都是从左向右的。

(2)+、-、*、/的操作数可以是int型、float型、double型,%的操作数只能是整型。

(3)/:如果操作数都是整型,结果为整型。整数的得到并不是四舍五入,而是取整数部                  分,舍去小数。如果操作数有一个是浮点型,则结果为浮点型。a/b为a除以b的值

(4)%:模数,求余符号。a%b得到的是a除以b的余数。

2.移位操作符 ***

左移操作符:<<     

移位规则:左边抛弃,右边补0    

运算规律为:给一个数左移n位,相当于乘以2的n次方。

右移操作符:>>    

移位规则:  逻辑移位和算术移位(取决于编译器)。

(a)逻辑移位:左边用0填充,右边丢弃。

(b)算术移位(常用):左边用原该数的符号位填充,右边丢弃。

两者对数的运算都是先将数化为二进制数,再进行左右移操作,从而改变原数的值

2.位操作符 ****

                    &

规则:先化为二进制数,一位一位&,同为1才为1。

       |

规则:先化为二进制数,一位一位|,同为0才为0。

      ^

规则:先化为二进制数,一位一位^,相同为假,相异为真。

按位异或实用示例:

int num1 = 10;
int num2 = 20;
//交换num1和num2且不实用第三变量的方法
num1 = num1^num2;
num2 = num1^num2;
num1 = num1^num2;
//num1的二进制为00000000000000000000000000001010,
//num2的二进制为00000000000000000000000000010100,
//异或后num1=    00000000000000000000000000011110,
//异或后num2=    00000000000000000000000000001010,即变为num1.
//异或后num1=    00000000000000000000000000010100,即变为num2.

4.赋值操作符

赋值类型

   

普通赋值

             =

赋值操作符的左侧必须为一个变量。可以用在给变量定义并初始化时,也可以用在定义后给变量赋值。

复合赋值

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

这些赋值符都是自右向左结合。

5.单目运算符

(1)!   逻辑反操作
用法:int a=10;printf("%d",!a);  结果 :0       
(2)-    负值    R-L    (表示从右向左结合)    
(3)+   正值    R-L            
(4)sizeof操作数的类型长度(单位:字节)字符串计算时系统自动给字符串的末尾加上‘\0'.
(5)~  对一个数的二进制按位取反。

//例
int a=5;  
int b=~a; 
printf("%d",b);
//5的二进制为00000000000000000000000000000101
//按位取反为  11111111111111111111111111111010
//最高位是1,说明是负数。负数以原码的补码存储在二进制中。
//原码转换补码的方法是:符号位不变,其它位按位取反,再给末位加1.反过来求:
//先减1,按位取反,符号位不变。所以b的原码是10000000000000000000000000000110,化为十进制为-6.

符号

作用

使用方法

--

自减

--i  :在使用i之前给i减1.        

i---:  在使用i之后给i减1.

++

自增

++i:在使用i之前加1     

i++:在使用i之后加1.

&

取地址

int i;   int* p;    p=&i;       那么p存放的是i的地址。

*

间接访问

对指针变量前加*可以间接访问指针变量所指向的变量

()

强制类型转换

int  a=1;   double b=(double)(a);   这就实现了把a的值先转换为浮点型后再赋给b

6.关系操作符

有>、<、>=、<=、!=(测试“不相等“)、==(测试相等),多用于判断或循环结构。

较为简单不做解释,仅 强调 当判断相等时必须用 == 切记与 单个 = 的区别

 

8.条件操作符

(表达式1)?(表达式2):(表达式3)     判断表达式1,如果为真,则执行表达式2,否则执行表达式3.

:c=a>b?a:b;   表示把a和b中的较大值赋给c。

 

 

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-29 12:19
点赞 评论 收藏
分享
粗心的雪碧不放弃:纯学历问题,我这几个月也是一直优化自己的简历,后来发现优化到我自己都觉得牛逼的时候,发现面试数量也没有提升,真就纯学历问题
点赞 评论 收藏
分享
牛舌:如果我不想去,不管对方给了多少,我一般都会说你们给得太低了。这样他们就会给下一个offer的人更高的薪资了。
点赞 评论 收藏
分享
秋招进行到现在终于能写总结了。完全没想到战线会拉这么长,过程会如此狼狈,不过更应该怪自己太菜了。好在所有的运气都用在了最后,也是有个去处。背景:双2本硕科班,无竞赛,本科一段研究所实习,硕士一段大厂暑期实习但无转正。技术栈是C++&nbsp;&amp;&nbsp;Golang,实习是客户端音视频(而且是鸿蒙端开发),简历两个C++项目一个Golang项目。主要投递岗位:后端,cpp软开,游戏服务端,测开,以及一些不拘泥于Java的岗位。从8月起总共投递123家公司,笔试数不清了,约面大约30家。offer/oc/意向:友塔游戏(第一个offer,面试体验很好,就是给钱好少南瑞继保(计算机科班点击就送(限男生),不...
乡土丁真真:佬很厉害,羡慕~虽然我还没有到校招的时候,也想讲一下自己的看法:我觉得不是CPP的问题,佬的背书双2,技术栈加了GO,有两段实习。投了123,面了30.拿到11个offer。这个数据已经很耀眼了。这不也是CPP带来的吗?当然也不止是CPP。至少来说在这个方向努力过的也会有好的结果和选择。同等学历和项目选java就会有更好的吗?我个人持疑问态度。当然CPP在方向选择上确实让人头大,但是我觉得能上岸,至于最后做什么方向,在我看来并不重要。至于CPP特殊,有岗位方向的随机性,java不是不挑方向,只是没得选而已。也希望自己以后校招的时候能offer满满
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务