c语言操作符总结
- 算数操作符:+ - * / %
- 算数操作符注意的问题:
1.除了%操作符之外,其他的操作符可以使用整数和浮点数
2.对于/操作符如果两个操作符都为整数,着呢个性整数除法。而只要有浮点数执行的就是浮点数除法。
3.%操作符的两个操作符必须为整数。返回的就是整数之后的余数。9%2==1 9%3==0
- 多位操作符: << 左移操作符 >>右移操作符
- 多位操作符注意的问题
1.左移操作符移位规则:左边抛弃,右边补0
int a=10;
ine b=a<<1;
printf("%d%d\n",a,b);
输出 10 20
00000000000000000000000000001010 //10在内存中的二进制
00000000000000000000000000010100//10左移一位产生的结果
2.右移操作费移位规则:
- 逻辑移位(左边用0填充,右边丢弃)//面对负数时,由于首位表示符号,所以导致表达不准确
- 算数移位(左边用该值的符号位填充,右边丢弃)原来是正数补0,原来是负数补1
注意注意!!!不能移动负数位如;num>>-1
- 位操作符:& // 按位与(全1为1,其余为0)
| //按位或(全0为0,其余为1)
^ //按位异或(相同为0,相异为1)
- 位操作符注意问题:他们的操作数必须是整数。
实现两个数交换
int a=10;
int b=20;
a=a^b;
b=a^b;
a=a^b;
printf("%d%d\n",a,b);
- 赋值操作符(它可以实现将自己所想的值赋上去)
int a=10;
a=20;//重新赋值
- 复合赋符 += -= *= /= %= >>= <<= &= |= ^=
int x=10;
x+=10;//x=x+10
- 单目操作符 :
! 逻辑反操作 — 负值 + 正值 & 取地址 sizeof 操作数的类型长度(以字节为单位 ~ 对一个数的二进制按位取反 -- 前置,后置-- ++ 前置,后置++
* 间接访问操作符(解引用操作符)
(类型) 强制转换类型
int=(int)3.14
- 关系操作符:
> >= < <= != 用于测试不相等 == 用于测试相等 - 逻辑操作符
&& 逻辑与
|| 逻辑或
注意注意!!!(逻辑和按位的区别)
1&2——->0
1&&2——>1
1|2 ——->3
1||2——>1
int main()
{
int i=0,a=0,b=2,c=3,d=4;
i=a++&&++b&&d++;
printf("%d%d%%d%d",a,b,c,d)
return 0;
}
输出;1 2 3 4(a自增了一下,a是0为假,后面不在运算)
- 下标引用,函数调用和结构成员
1.[]
操作数:一个组名+一个索引值
例如:arr[9]=10;
[]的操作数是arr和9
2.()
函数调用操作符
接受一个或多个操作数:第一个操作数是函数名,剩余的操作数数就是传递给函数的参数
void test()
{
printf(“hehe\n");
}
int main()
{
test();
return 0;
}
3.访问一个结构的成员
结构体.成员名
结构体——>成员名
struct Stu
{
char name[20];
int age;
float score;
};
int main()
{
struct Stu s;
struct Stu* ps = &s;
strcpy(s.name, "zhangsan");
s.age = 20;
s.score = 55.0f;
printf("%s %d %f\n", s.name, s.age, s.score);
printf("%s %d %f\n", (*ps).name, (*ps).age, (*ps).score);
printf("%s %d %f\n", ps->name, ps->age, ps->score);
return 0;
}