1、引言
今天学习的内容是C语言中的操作符
2、操作符分类
2.1、算数操作符
1、算数操作符中的“%”的左右两端必须是整数,求得的是余数。余数的范围是1~被除数。 2、算数操作符中的“/”,求得的是两数相除的商,当“/”除号的两端都是整数的时候,执行的是整数的除法,两段只要有一个是浮点数,执行的就是浮点数除法(即当10/3=3;10/3.0=3.3333无限循环)。
2.2、移位操作符
移位操作符的操作对象只能是整数
1、左移操作符,把a在内存中存储的二进制补码向左移动两位(即把a的补码向左移动两位),左边抛弃,右边补0
int main()
{
int a = 5;
int b = a<<2;
printf("%d\n",b);
return 0;
}
2、右移操作符: Ⅰ、算数右移:(右边丢弃,左边补原来的符号位) Ⅱ、逻辑右移:(右边丢弃,左边补0) tips:到底是算数右移动,还是逻辑右移,具体要看编译器,常见的编译器都是算数右移动
2.3、位操作符
位操作符操作对象只能是整数
1、& – 按(2进制)位与: 2、| – 按(2进制)位或: 3、^ – 按(2进制)位异或 Tips: 1、任何数字和 0 异或都是它本身 2、两个相同的数字异或得到的结果是 0
2.4、复合赋值操作符
1、+= / -= (加等/减等) 例如a+=10可以看做 a=a+10,a-=10可以看做a=a-10 2、这些复合操作符的本质就是将两个操作符的功能叠加起来
2.5、单目操作符
1、!逻辑反操作 2、& 取地址操作符 3、sizeof 操作数的类型长度(以字节为单位) 4、~ 对一个数的二进制按位取反(用法如下)
int main()
{
int a = 0;
printf("%d\n", ~a);
return 0;
}
5、++运算符:分为前置++(先加1,后使用,即先使用变量中内容,然后给结果加1),还有后置++(先使用变量中内容,整个表达式结束时,给变量加1) 6、* 间接访问操作符(解引用操作符)
int main()
{
int a = 10;
int* pa = &a;
*pa = 20;
printf("%d\n", a);
return 0;
}
7、(类型):强制类型转化,例子如下
int main()
{
int a = (int)3.14;
printf("%d\n",a);
return 0;
}
2.6、双目操作符
操作符左右两边各有一个操作数的就叫双目操作符
2.7、关系操作符
1、= 是赋值,而 == 是等于的意思,使用时,用下面的方法可以减少错误率
int main()
{
int a = 5;
if(5 = a);
{
printf("haozai\n");
}
return 0;
}
2.8、逻辑操作符
1、&& 逻辑与:左操作数为假,右边不计算 2、 || 逻辑或:左操作数为真,右边不计算
2.9、三目操作符(问号表达式)
表达式1 ?表达式2 :表达式3;
int main()
{
int a = 10;
int b = 20;
int max = 0;
max = (a > b? a : b);
return 0;
}
小知识
整数有3种二进制的表达形式,这3种形式分别为:**原码、反码、补码**
1、正整数 — 原码、反码、补码相同 2、负整数 — 原码、反码、补码不同 3、整数在内存中存储的是补码 4、整数在进行打印等操作时使用的是原码
5、左值和右值: 左值,是可以放在等号左边的,一般为一块空间。 右值,是可以放在等号右边的,一般为一个值,或者一块空间的内容。
6、abs函数:对整数求绝对值;fabs函数:对小数求绝对值 7、逗号表达式:从左到右,依次计算,整个表达式的结果取最后一个表达式的值(逗号表达式的优先级最低) 8、结构体
struct Stu
{
char name[20];
int age;
double score;
};
int main()
{
struct Stu s = {"zhangsan" , 20, 85.5};
printf("%s %d %.lf\n", s.name, s.age, s.score);
struct Stu * ps = &s;
printf("%s %d %.lf\n",(*ps).name, (*ps).age, (*ps).score);
printf("%s %d %.lf\n", ps->name, ps->age, ps->score);
return 0;
}
例题:不能创建临时变量(第三个变量),来实现两个数的交换
方法一:(不能解决a和b数字过大,整型不能承受的情况)
int main()
{
int a = 3;
int b = 5;
printf("交换前: a=%d b=%d", a, b);
a = a + b;
b = a - b;
a = a - b;
printf("交换后: a=%d b=%d", a, b);
return 0;
}
方法二:(只能应用在整数上)
int main()
{
int a = 3;
int b = 5;
printf("交换前: a=%d b=%d", a, b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("交换后: a=%d b=%d", a, b);
return 0;
}
例题2
|