c语言操作符
操作符对于一个程序员来说,是最熟悉不过的了,其数目繁多,单个容易理解,但是组合起来就不太容易让人理解 了,操作符对于计算机世界来说,十分有必要,可以更加便于计算机运算。
- 算术操作符
作为最让我们熟悉的莫过于加减乘除了,它们都属于算术操作符+ - * \
- 除了%操作符之外,其他的几个操作符可以作用于整数和浮点数。
- 对于/操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
- %操作符的两个操作数必须为整数。返回的是整除之后的余3. %操作符的两个操作数必须为整数。返回的是整除之后的余
-
移位操作符
注意 对于移位运算符,不能移动负数位,这是c语言标准未定义的int num = -10; num = num << 1; //左边抛弃 右边补零 num = num >> 1; //num为正 左边补0 右边抛弃 1010 -> 0101 //num为负 -1的补码为32个1所以 左边为32个1, 右边抛弃 1111111010 -> 111111101 -5
- 左移 左边抛弃 右边补零
- 右移
- 逻辑右移 (正数)num为正 左边补0 右边抛弃 1010 -> 0101
- 算术右移 (负数)num为负 -1的补码为32个1所以 左边为32个1, 右边抛弃 1111111010 -> 111111101 -5
-
位操作符
1 & 1 = 1,1 & 0 = 0,0 & 1 = 0,0 & 0 = 0; // 全1为1 1 | 1 = 1,1 | 0 = 1,0 | 1 = 1,0 | 0 = 0; // 有1为1 1 ^ 1 = 0,1 ^ 0 = 1,0 ^ 1 = 1,0 ^ 0 = 0; // 相反为1
- &按位与操作符 运算规则:全1为1
- | 按位或操作符 运算规则: 有1为1
- ^ 按位异或操作符 运算规则: 相反为1
-
赋值操作符
这再熟悉不过了 = 当我们多变量赋值时我们就需要用到它// 连续赋值 int a =0; int x = 1; int y = 4; a = x = y + 1;
- 复合操作符
操作符 例子 转换 += x += 1 x = x + 1 -= x -= 1 x = x - 1 /= x /= 1 x = x / 1 %= x %= 1 x = x % 1 >>= x >>= 1 x = x >> 1 <<= x <<= 1 x = x << 1 &= x &= 1 x = x & 1 丨= x 丨= 1 x = x 丨 1 ^= x ^= 1 x = x ^ 1 -
单目操作符
操作符 | 含义 |
---|---|
! | 逻辑取反 |
– | 负值 |
+ | 正值 |
~ | 按位取反 |
- - | 前置、后置 - - |
++ | 前置、后置 ++ |
* | 间接访问操作符(解引用) |
& | 取地址 |
sizeof | 操作数的类型长度 |
printf("%d\n", sizeof(a));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof a);
printf("%d\n", sizeof int)
// 这样写等价
int a = 10;
int x = ++a;
//先对a进行自增,然后对使用a,也就是表达式的值是a自增之后的值。x为11
int y = --a;
//先对a进行自减,然后对使用a,也就是表达式的值是a自减之后的值。y为
int a = 10;
int x = a++;
//先对a先使用,再增加,这样x的值是10;之后a变成11;
int y = a--;
//先对a先使用,再自减,这样的值是11;之后a变成1
int i = 1;
int ret = (++i) + (++i) + (++i);
printf("%d\n", ret); // vs 12 linux gcc 10
printf("%d\n", i); // vs 4 linux 4
这段代码中的第一个 + 在执行的时候,第三个++是否执行,这个是不确定的,因为依靠操作符的优先级和结合性
是无法决定的
- 关系操作符
操作符 含义 > 大于 >= 大于等于 < 小于 <= 小于等于 != 不相等 == 相等 - 逻辑操作符
操作符 | 含义 |
---|---|
&& | 逻辑与 |
丨丨 | 逻辑或 |
1&2----->0 //01 & 10 --> 0
1&&2---->1 //true
1|2----->3 // 01 || 10 --> 11
1||2----1 // true
int i = 0,a=0,b=2,c =3,d=4;
i = a++ && ++b && d++; // i = ++a && ++b && d++
printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d); //a=1 b=2 c=3 d=4 | a=1 b=3 c=3 d=5
//左边为假右边不运算
i = a++||++b||d++; // i = ++a || ++b || d++
printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d); //a=1 b=3 c=3 d=4 | a=1 b=2 c=3 d=4
// 左边为真右边不运算
- 条件操作符
exp1 ? exp2 : exp3
if (a > 5)
b = 3;
else
b = -3;
a>5 ? b=3 : b = -3
- 逗号表达式
exp1, exp2, exp3, …expN
逗号表达式,就是用逗号隔开的多个表达式。 逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果
写在最后
最近推出了公众号 coding趣谈,一位在读学生的技术提升之路,为您提供一系列我在学习路上的笔记,经验,以及感悟。往与君共勉,共同进步! 欢迎大家来关注哦!