C语言操作符
C语言操作符
算术运算符
C提供了常有的算术运算符:
+、 —、 *、 /、 %、
除了%操作符,其余操作符既适用于浮点类型,又适用于整数类型。当/操作符的两个操作数都是整数时执行整除运算,其他情况执行浮点数除法。 % 为取模操作符,其两个操作数必须为整数,而返回的值是整除之后的余数。
移位操作符
- 左移位操作符<<
- 右移位操作符>> 移位操作是把一个值的二进制位向左或向右移动。 左移一位,相当于数值乘2;右移一位,相当于除以2。 在 左 移位中,值最左边的几位被丢弃,右边多出来的几个空位由 0 补齐。 在 右 移位中,有两种方案:(二者只有在操作符是负值时才不一样) 逻辑移位:左边移入的位用0填充; 算数移位:左边移入的位由原先该值的符号位决定,符号位为1 则移入的位均为1,符号为0,移入的位均为0。 左操作数的值将移动由右操作数指定的位数,两个操作数都必须是整型类型。
位操作符
位操作符有:
- & :按位与 如果两个位都为1,结果为1;否则结果为0
- | :按位或 如果两个位都是0,结果为0;否则结果为1
- ^ :按位异或 如果两个位不同,则结果为1;如果两个位相同,结果为0
简单赋值式
- = :赋值表达式;赋值表达式的值就是左操作数的新值。赋值表达式的结合性是从右到左。
复合赋值式
+= 、-=、-+、*=、/=、 %=、 <<=、 >>=、 &=、 ^=、 |= (类型) 举例: a+=5 <=> a=a+5
单目操作符
- C语言中只接受一个操作数的操作符 :
- ! 逻辑反操作 操作数为真,结果为假;操作数为假,结果为真。实际上产生一个整型结果,0或1.
- ~ 求补操作 对整型操作数进行操作 原先为1的位变为0,原先为1的位变为0
- (–) 产生操作数的负值
- & 产生操作数的地址
- *间接访问操作符,与指针一起使用,用于访问指针所指向的值
- sizeof 判断操作数的类型长度,以字节为单位表示,操作数既可以是个表达式,也可以是(类型名)
- (类型) 强制类型转换,用于把表达式的值转换为另外的类型
- ++ – 这两个操作符都有两个变型,前缀形式(++i)和后缀形式 (i++)
- 前缀形式:操作数的值被增加或减小,但表达式的值就是操作数增加(减小)后的值
关系操作符
= < <= != 测试不相等 == 测试相等 如果两端的操作数符合操作符指定的关系,表达式结果是1,如果不符合,结果是0 关系操作符的结果是整型值,所以它可以赋值给整型变量 注意,在以后编写程序时一定注意区分 赋值= 和 相等==
逻辑运算符
&& 逻辑与 (1)&&( 2 ) 如果表达式1是真的,再对表达式2求值; 如果表达式1是假的,对表达式2没必要再求值,整个式子则为假
|| 逻辑或 (1)&&( 2 ) 如果表达式1是真的,不再对表达式2求值; 对表达式1求值,若为真,则不必要求后面的,整个式子结果已经确定
条件操作符
条件操作符接受三个操作数,并且会控制子表达式的求值顺序。 exp1 ? exp2 : exp3 首先算exp1,若它的值为非0值,即为真,那么整个表达式的值为exp2,对exp3不会求值; 但是如果exp1的值为假,那么不对exp2 求值,整个表达式的值为exp3。
逗号操作符
exp1,exp2,exp3,、、、expN
这些表达式自左向右逐个进行求值,整个逗号表达式的值就是最后一个表达式的值。
下标引用、函数调用和结构成员
//下标引用[] int main() { int arr[10] = { 0 }; arr[4] = 8;//(arr+4)——(4+arr)——4[arr];[]的两个操作数是arr和4 4[arr] = 6; return 0; }
//函数调用操作符 接受一个或者多个操作数 第一个操作数是函数名 其余的操作数是传给函数的参数
{
return x + y;
}
int main()
{
int a = 10;
int b = 5;
Add(a, b);//Add是函数的地址,&Add也是函数的地址,表示同一个意思,()是函数调用操作符,第一个操作数是Add,还有 a,b
}
//结构体
``#include<string.h>
enum SEX
{
male,
female,
secert,
};//此时还没有开辟空间,只是个类型
struct STU
{
char name[20];
int age;
enum SEX sex;
};
int main()
{
struct STU s1;//现在才开辟空间
struct STU * ps = &s1;
(*ps).age = 20;
ps->age = 20;//ps指向对象的成员
strcpy(ps->name, "张三");
ps->sex = male;//结构体对象 用. 结构体指针 ->
s1.age = 20;
s1.sex = male;
strcpy(s1.name, "张三");//对于字符串的赋值必须用strcmp
printf("%sn%dn%dn", s1.name, s1.age, s1.sex);//张三 20 0
system("pause");
return 0;
}
- 【Android开发学习笔记之一】5大布局方式详解
- Selenium3源码之common下action_chains.py模块分析
- 图的简单应用(C/C++实现)
- 一个很easy的脚本--php获取服务器端的相关信息
- Kubernetes网络解决方案的比较
- OSX 上初步尝试 asp.net 5
- 一个粗心的Bug,JSON格式不规范导致AJAX错误
- weiapi2.2 HelpPage自动生成接口说明文档和接口测试功能
- C#通过WMI的wind32 的API函数实现msinfo32的本地和远程计算机的系统日志查看功能
- C#通过WMI的wind32 的API函数实现msinfo32的本地和远程计算机的系统摘要信息查看功能
- Envoy架构概览(5):负载均衡
- Envoy架构概览(6):异常检测
- Envoy架构概览(7):断路,全局限速和TLS
- Envoy架构概览(9):访问日志,MongoDB,DynamoDB,Redis
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法