Keil C51基础之运算符详解
一. 算术运算符 包括加(+)、减(-)、乘(*)、除(/)、取模 (%)、自加(++)、自减(--)。
示例:
5 % 3; 结果: 2
char a = 5;
a++; //结果: 5+1, a为6。
a--; //结果: 6-1, a为 5。
二. 关系运算符 包括小于(<)、小于等于(<=)大于(>)、大于等于(>=)、等于(==)、不等于(!=).
示例:
return(1 < 2); //结果: return 1;
return(1 > 2); //结果: return 0;
return(2 >= 2); //结果: return 1;
return(2 <= 2); //结果: return 1;
return(2 == 2); //结果: return 1;
return(2 != 2); //结果: return 0;
三. 逻辑运算符 包含非运算符(!)、与运算符(&&)、或运算符(||)。
示例:bit a = 0;Bit b = 1;
return( !a ); //结果: return 1;
return( !b ); //结果为: return 0;
return (a && b) ; //结果为: return 0;
return (a || b); //结果为: return 1。
四. 位运算符 包含左移运算符(<<)、右移运算符(>>)、按位取反运算符(~)、按位或运算符位(|)、按位与运算符位(&)、按位异或运算符位(^)。所有位运算都是相对于二进制数进行运算。即数据转换为二进制数后再做运算。
示例:char a = 33; //00100001B
char b =111; // 01101111B
char c;
a << 1; //结果a为66, 即01000010B
b >> 1; //结果b为55, 即00110111B
~a; //结果a为 -67, 即10111101B
C = a | b; //结果 :(-67) |55, c为-65, 即10111111B
c = a ^ b; //结果: (-67)^55, c为 -118, 即10001010B
五. 赋值运算符 包含简单赋值运算符(=)、复合算术赋值运算符(+=, -=,
*=,/=)和复合位运算赋值符(&=, |=,^=, >>=, <<=)。
示例:
char a = 5; //定义整形变量a,并赋初值5
a += 1; // 结果:5+1, a值为 6
a - = 1; //结果: 6-1, a 值为 5
a *= 3 ; //结果: 5*3,a 值为 15
a /= 3; //结果:15/3,a 值为 5
a &= 3 //结果:5&3, a 值为 1
a |= 3; // 结果:1|3, a 值为3
a ^= 3; //结果:3^3, a 值为 0
a = 1;
a <<= 2; //结果:a 值为 4
a >> =2; //结果:a值为1
六. 条件取值运算符( ? :)
示例: int a, b;
b = 0;
a = b > 2 ? 1 : 3 //结果: b > 2 不成立, a 为 3
七. 逗号运算符(,) 用与把若干个表达式组合成一个表达式。
示例:
int a, b, c; //定义三个整形变量
8. 指针运算符(*,&)
示例:
char a = 10;
char* pch;
char b;
pch = &a; //取地址
b = *pch; //取内容
9. 求字节运算符(sizeof)
示例:
char a[100];
int c;
c = sizeof a; //sizeof 是一个运算符,其后并非一定要加()
10. 特殊运算符 包括括号(),下标[],成员(->,.)
示例:
char array[100];
typdef struct
{
char age;
int salary;
} worker;
worker * pw;
worker zhangsan;
zhangsan. Salary = (10000+200)/22.5*18;
pw = & zhangsan;
pw ->age = 35;
运算符存在优先级,运算符的优先级如下表: