c语言操作符总结
分类:
- 算术操作符
- 移位操作符
- 位操作符
- 赋值操作符
- 单目操作符
- 关系操作符
- 逻辑操作符
- 条件操作符
- 逗号表达式
- 其他操作符(下标引用、函数调用和结构成员)
一、算数操作符
1、算术操作符包括:+ 、— 、 * 、/ 、%
2、加、减、乘操作符和平常数学中的运算法则相同。
3、除法操作符左右两边操作数为整型,则执行整数除法,只要有一个操作数为浮点型,则执行浮点型除法。
4、取余操作符左右两边操作数必须为整数。
二、移位操作符
1、移位操作符包括:<< 左移操作符,>> 右移操作符
2、左移操作符移位规则:左边抛弃,右边补0
//正数:原码=反码=补码
//负数:反码=原码除符号位取反 补码:反码+1
int num = ; //00000000 00000000 00000000 00001010
num << ; //00000000 00000000 00000000 00101000
int num = -; //11111111 11111111 11111111 11110110
num << ; //11111111 11111111 11111111 11011000//正数:原码=反码=补码
//负数:反码=原码除符号位取反 补码:反码+1
int num = ; //00000000 00000000 00000000 00001010
num << ; //00000000 00000000 00000000 00101000
int num = -; //11111111 11111111 11111111 11110110
num << ; //11111111 11111111 11111111 11011000
3、右移操作符移位规则:
逻辑移位:右边抛弃,左边用0填充
算数移位:右边抛弃,左边用原数字的符号位填充
int num = -; //11111111 11111111 11111111 11111111
num >> ;
//算数移位: //11111111 11111111 11111111 11111111
//逻辑移位: //01111111 11111111 11111111 11111111
int num = ; //00000000 00000000 00000000 00000010
num >> ;
//算数移位: //00000000 00000000 00000000 00000001
//逻辑移位: //00000000 00000000 00000000 00000001
注意:移位操作符移动的是二进制位,不能移动负数位。
三、位操作符
1、位操作符包括:&按位与 、|按位或 、^按位异或
2、两个数字相同异或等于0,0和任何数字异或得该数字
3、给定一组数字,除一特殊数字外,其他都成对出现,找出该数字:异或所有数字
//不创建临时变量,实现两数字交换
int a = ;
int b = ;
a = a^b;
b = a^b;
a = a^b;
printf("a = %d\tb = %d\n",a,b);
//求一整数在内存中的二进制中1的个数
int num = -;
int i = ;
int count = ;
while(num))
{
count++;
num=num&(num-)
}
printf("二进制中1的个数:%d",count);
四、赋值操作符
1、普通赋值操作符:=
2、复合赋值符:+= 、-= 、*= 、/= 、%= 、>>= 、<<= 、&= 、|= 、^=
int a = ;
int x = ;
int b = a+x;
x += ;
a *=;
五、单目操作符
1、单目操作符包括:
!逻辑反 //一般用于表示真假
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符
(类型) 强制类型转换
2、sizeof()为操作符,不为sizeof()函数,()中可以为类型,也可为变量,为变量时()可以去掉,()中为数组名计算的是数组字节数
3、数组名arr取的是数组首元素的地址,&arr取的是整个数组的地址 //int (*p3)[10]=&arr; p3是一个数组指针
4、关于数组名的扩充:
- 数组名可以表示整个数组 : (1)、sizeof(数组名)(2)、&数组名
- 数组名可以表示首元素地址 : 除以上两种情况外,数组名都表示首元素地址
void test1(int arr[])
{
//计算传来首元素指针大小
printf("%d\n",sizeof(arr));//
}
void test2(char ch[])
{
//计算传来首元素指针大小
printf("%d\n",sizeof(ch));//
}
int main()
{
int arr[] = {};
char ch[] = {};
//计算数组的字节大小
printf("%d\n",sizeof(arr));//
printf("%d\n",sizeof(ch));//
test1();
test2();
}
六、关系操作符
1、关系操作符包括:> 、>= 、< 、<= 、!= 、==
2、注意等于时用==,=为赋值操作符
七、逻辑操作符
1、逻辑操作符包括:&&逻辑与 、||逻辑或
2、对于逻辑与,左边为假,后边都不运算
3、对于逻辑或,左边为真,后边都不运算
int i = ,a = ,b = ,c = ,d = ;
i = a++ && ++b && d++;
printf("%d %b %b %b",a,b,c,d);//1 2 3 4
i = a++ || ++b || d++;
printf("%d %b %b %b",a,b,c,d);//2 2 3 4
八、条件操作符
exp1 ? exp2 :exp3
九、逗号表达式
exp1 ,exp2 , exp3,……expN
逗号表达式,就是用逗号隔开的多个表达式。逗号表达式,从左到右执行,整个表达式的结果是最后一个表达式的结果
十、其他表达式(下标引用、函数调用和结构成员)
1、[ ]下标引用操作符
操作数:一个数组名+一个索引值
2、()函数调用操作符
接受一个至多个操作数,第一个为函数名,其他给函数传递实参
3、访问一个结构成员
- 结构体.成员名
->结构体指针->成员名
c语言操作符总结的更多相关文章
- C语言操作符优先级
C语言操作符优先级 优先级 运算符 含 义 要求运算 对象的个数 结合方向 1 () [] -> . 圆括号 下标运算符 指向结构体成员运算符 结构体成员运算符 自左至右 2 ! 逻辑非运 ...
- C语言操作符
C语言操作符的分类: 算术操作符 逻辑运算符 位操作符 赋值操作符 单目操作符 关系操作符 条件操作符 逗号表达式 数组下标引用 函数调用 结构体成员使用 大体上,C语言的操作符具体就这么些, ...
- C语言操作符学习总结
c语言中关于操作符部分的学习,可以主要分为两个部分:操作符和表达式. 这里首先是列举各种操作符,在C语言中,一般主要的操作符有这么几种:算数操作符,移位操作符,位操作符,赋值操作符,单目运算符,关系操 ...
- C语言-操作符与表达式
C语言入门之操作符与表达式 前言 本篇文章主要包括各种操作符的介绍与表达式求值,欢迎各位小伙伴与我一起学习. 一.操作符 分类 算术操作符 移位操作符 位操作符 赋值操作符 单目运算符 关系操作符 逻 ...
- C语言操作符/表达式及其作用总结
一.算术操作符:+ - * / % 1. 除了 %操作符之外,其他的 几个操作符可以作 用于整数和浮点数. 2. 对于"/"操作符如果两个操作数都为整数,执行整数除法.而只要有浮点 ...
- 被C语言操作符优先级坑了
今天有一个枚举的题目的代码是这样的: 重点在于maxXor这个函数的实现,枚举两个数字,其中maxr保存了最大值的 i 异或 j , 可是这个程序执行结果大大出乎意外-_-. 然后就把 i 异或 j ...
- C++ 语言操作符的优先级
cppreference.com -> C++ 操作符优先级 C++ 操作符优先级 优先级 操作符 1 () [] -> . :: ! ~ ++ ...
- c语言操作符 “++”另类行为
正常情况下,我们使用++ int a = 1; a++; printf(“%d”,a); // 2; 很简单没什么好说的. #include <stdio.h> int main() ...
- 浅析C语言指针问题
首先明白c语言操作符的优先级及结合性就很容易理解了. 链接 1.关于char *s 及 char s[] char *s指向的是一个字符串对象的指针,可以理解为间接引用,比如 char *s = “1 ...
随机推荐
- CCS的文本及字体
1.文本 CSS 文本属性可定义文本的外观 通过文本属性,您可以改变文本的颜色.字符间距,对齐文本,装饰文本,对文本进行缩进,等等. 缩进文本 把 Web 页面上的段落的第一行缩进,这是一种最常用的文 ...
- 使用JBolt新建Maven版工程步骤
一.打开新建对话框 在左侧右键new中可以找到JFinal创建工程的菜单 JBoltHome页面也有快捷按钮用来弹出创建工程对话框. 二.填写Maven和其他信息配置 填写工程name 主包名 下面有 ...
- 学习笔记TF058:人脸识别
人脸识别,基于人脸部特征信息识别身份的生物识别技术.摄像机.摄像头采集人脸图像或视频流,自动检测.跟踪图像中人脸,做脸部相关技术处理,人脸检测.人脸关键点检测.人脸验证等.<麻省理工科技评论&g ...
- JSP+javaBean:简易投票网页练习
一.项目目标 session作用域中如果不及时清理一些对象,在一定久的时间或相当数量的请求后,造成session中大量对象堆积,这将严重影响服务器的性能. 在本实例中,通过写一个jsp与javaBea ...
- android 位置记录软件
行者 用的百度高德的方案,没有偏移问题endomondo,咕咚,行者.endomondo是国外软件,运行稳定,但GPS记录漂移比较严重:咕咚的GPS位置记录比较准确,缺点是容易崩溃,譬如记录过程中来个 ...
- 群晖NAS同步文件,防止Mac OS X自动休眠的办法
背景: NAS drive同步文件到移动硬盘,需要消耗很长时间.但长时间不动电脑,mac又会自动关闭所有application,进入休眠模式,导致同步任务被终止. 使用系统的节能设置配置也没能成功关闭 ...
- 如何开发一款html5(H5)跨平台 k12动画/交互课件/游戏
flash交互课件能生动表达教学内容,也深受广大教育工作者的喜爱,但是目前flash课件只能在pc电脑平台上进行展示,且目前苹果公司已经不再支持flash各类产品,也就是后续苹果ios pc系统也已经 ...
- 工控随笔_02_西门子_WinCC的IO域利用C脚本返回值
WinCC的输入输出域用来显示信息或者接受操作人员的输入.当作为显示功能时,只有直接的变量连接 才能正常的显示,如果使用动态对话框进行设置且用了表达式则不能正确显示. 但是有时候我们在WinCC变量管 ...
- 虚拟机中的linux系统文件突然全部变成只读的问题
当宿主系统和虚拟机的IO都比较繁忙时,虚拟机的IO请求得不到及时的响应.虚拟机Linux不知道自己运行在虚拟机里面,会认为是磁盘IO错误,为了保护磁盘数据会remount分区为只读. 这时候如果只是对 ...
- 学习笔记之English
雅思听力地图题的常用短语 - 无忧机经预测 https://mp.weixin.qq.com/s/VmV3L2METymtjMWHY2fNiA 雅思听力租房的那些事儿 - 北京市海淀区环球雅思 htt ...