C语言——操作符大全
来源:互联网 发布:linux 查看用户数 编辑:程序博客网 时间:2024/05/29 09:17
- 分类
- 算术操作符
- 移位操作符
- 位操作符
- 赋值操作符
- 单目操作符
- 解引用操作符
- 类型强制转换
- 关系操作符
- 逻辑操作符
- 条件操作符
- 逗号表达式
- 下表引用函数调用和结构成员
- 分类
分类
1.算术操作符
+ - * / % 加减法和数学中的一样 , 其中乘除法对于整数的结果是整数,对于浮点数的结果是浮点数,但要注意结果打印的格式和精度缺失。%是取余的意思,如a%b,得到a的余数,%两边的a和b必须为整数。
2.移位操作符
(不适用于浮点数)<< 左移操作符 >> 右移操作符 左移操作符移位规则:在32个比特位中补码左边越位抛弃,右边不足补零。右移操作符移位规则:首先右移运算分为两种: 1.逻辑移位(基本不用此规则):在32个比特位中补码右边越位抛弃,左边不足补零。 2.算数移位(基本采用此规则):在32个比特位中补码右边越位抛弃,左边不足用原符号补上。如下: 补充:<< 左移操作有乘二的效果,>> 右移操作有除二的效果,对整数和负数皆适用,请读者自行体会。警告:对于移动运算符,不要移动负数位,这个是标准未定义的。如:int num = 10;num>>-1;//error补充:计算机内的的数据是按补码运算的,但是是按原码的结果打印电脑屏幕上的。
3.位操作符
& 按位与| 按位或^ 按位异或
注意:它们的操作数必须是整数。 例如:a的补码为 00000101 b的补码为 00010110a & b的规则为:两数补码同位比较,都为1取1,其余都取零,即a&b得到 00000100a | b的规则为:两数补码同位比较,有1就取1,都为零才取零,即a | b得到 00010111a ^ b的规则为:两数补码同位比较,相同取零,不同取1,即a ^ b得到 00000100.
4.赋值操作符
=例如: int a = 10;赋值操作符可以连续赋值。复合赋值:+= -= *= /= %= >>= >>= &= |= ^=如a+=1为 a=a+1。其余同理。
5.单目操作符
! 逻辑反操作 - 负值& 取地址+ 正值sizeof 操作数的类型长度(以字节为单位)~ 对一个数的二进制按位取反-- 前置,后置--++ 前置,后置++* 间接访问操作符(解引用操作符)(类型) 强制类型转换
规则:!: 对非0的数取反为0,对0取反为1.& : 若arr是数组名,&arr表示整个数组,若swap是函数名则&swap没有语法错误。int a =1; &a得到的是a的地址注意:sizeof(不是函数)
如下
int a= 10;int b=0;int arr[10]={0};printf("%d",sizeof a);//可以这样写printf("%d",sizeof int);//不可以这样写printf("%d",sizeof (int));//可以printf("%d",sizeof(arr));//为40,表示整个数组printf("%d",sizeof(int [10]);//为40,可以这样写printf("%d",sizeof(&arr);//为4,表示数组首元素地址字节大小printf("%d",sizeof(b=a+5);//为4,sizeof()内的表达式不计算,所以b还是0
~ :对一个数的二进制数取反,如:0001010取反得到 1110101++ - - :分为前置和后置区别如下:
#include<stdio.h>int main(){int a=1;int b=0;b=a++;//a先自增,表达式为a运算之前的值printf("%d %d",a,b);//打印得到2 1return 0;}
#include<stdio.h>int main(){int a=1;int b=0;b=++a;//a先自增,表达式为a运算之后的值printf("%d %d",a,b);//打印得到2 2return 0;} 前置- -和后置用法同上
解引用操作符:
int a = 10;int *p = &a;//这里*是定义p是指针的意思,不是解引用操作*p = 20;//这里的*才是解引用操作*&a = 20;//这样写编译不会出错补充:若有 *00x0018ff44;//语法错误,因为00x0018ff44是一个单纯的十六进制数字,无法对它解引用,可以改成 *(int *)00x0018ff44,强制转化成int型的地址就可以了。
(类型)强制转换
如:
int a=10;printf("%f",(float)a/3);结果为3.333333,()里面输入直接想转化的类型
6.关系操作符
> < >= <= != //用于测试不相等== //用于测试相等常见陷阱:x=get_value();if(x=5) //实际是将x赋值为5,程序必定执行,注意=和==的区别
7.逻辑操作符
&& 逻辑与|| 逻辑或#include <stdio.h>int main(){int i = 0,a=0,b=2,c =3,d=4;i = a++&&++b&&d++;//只有a参与运算//i = a++||++b||d++;//只有a和b参与运算printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);return 0;} 程序的结果为: 1 2 3 4,是不是很吃惊,其实对于&&两边只要有0就停止运算,从左到右运算,a++这个表达式为0,那就停止运算,不管++b和d++了,所以就是这个结果。那么对于i = a++||++b||d++,结果为1 3 3 4,a++为0,++b为3,||两边有真就为真,停止运算,结果就为1 3 3 4.
8.条件操作符:
exp1? exp2 : exp3int max = 0;int a = 5;int b = 4;max = a > b ? a:b;//若a>b为真,表达式的值为a,否则为b
9.逗号表达式:
exp1 ,exp2, exp3,.....//代码1int a = 1;int b = 2;int c = (a>b, a=b+10, a, b=a+1);//逗号表达式从左到右依次执行,整个表达式的结果是最后一个表达式的结果,即c = 13.
10.下表引用,函数调用和结构成员
1.
[] //下表引用:int arr[10];arr[9] = 10;//实现下表引用操作符若有arr[4] = 5和4[arr] = 5;两表达式效果相同,编译不会出错
2.
() //函数调用操作符有两个操作数,分别为函数名和函数调用的参数如:test(void) test2(a)
3.访问一个结构的成员
. //结构体名.成员名-> //结构体指针->成员名 如下:#include <stdio.h>struct Stu{char name[10];int age;char sex[5];double score;};void set_age1(struct Stu stu){stu.age = 18;//结构体名.成员名}void set_age2(struct Stu* pStu){pStu->age = 18;//结构体指针->成员名}
阅读全文
0 0
- C语言——操作符大全
- C语言字符串操作大全
- c语言字符串操作大全
- c语言字符串操作大全
- C语言字符串操作大全
- c语言字符串 操作大全
- C语言中操作符的优先级大全
- C语言文件操作函数大全
- C语言文件操作函数大全
- C语言文件操作函数大全
- C语言文件操作函数大全
- c语言文件操作函数大全
- C语言文件操作函数大全
- C语言文件操作函数大全
- C语言文件操作函数大全
- C语言文件操作函数大全
- C语言文件操作函数大全
- C语言文件流操作函数大全
- synchronized的实现原理及jvm对其优化
- c语言算法2
- Algorithms: DP
- 来自大学生投稿:一个适合新手上手的商城项目
- 如何求素数
- C语言——操作符大全
- javascript实现计算器功能
- Magento重写现有表单并更新现有字段
- iOS开发之UI篇(1)—— UIView
- 如何恢复和释放Hadoop中被删除的文件
- 20171123
- 分治与递归之快速排序
- python 最佳实践--编辑器
- 面试分享:一年经验初探阿里巴巴前端社招