c语言操作符

c语言操作符

操作符对于一个程序员来说,是最熟悉不过的了,其数目繁多,单个容易理解,但是组合起来就不太容易让人理解 了,操作符对于计算机世界来说,十分有必要,可以更加便于计算机运算。
  • 算术操作符
    作为最让我们熟悉的莫过于加减乘除了,它们都属于算术操作符
    + - * \
    
  1. 除了%操作符之外,其他的几个操作符可以作用于整数和浮点数。
  2. 对于/操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
  3. %操作符的两个操作数必须为整数。返回的是整除之后的余3. %操作符的两个操作数必须为整数。返回的是整除之后的余
  • 移位操作符
    注意 对于移位运算符,不能移动负数位,这是c语言标准未定义的

    int num = -10;
    num = num << 1; 	//左边抛弃 右边补零
    num = num >> 1; 	//num为正 左边补0 右边抛弃 1010 -> 0101
    					//num为负 -1的补码为32个1所以 左边为32个1, 右边抛弃 1111111010 -> 111111101 -5
    
    1. 左移 左边抛弃 右边补零
    2. 右移
      1. 逻辑右移 (正数)num为正 左边补0 右边抛弃 1010 -> 0101
      2. 算术右移 (负数)num为负 -1的补码为32个1所以 左边为32个1, 右边抛弃 1111111010 -> 111111101 -5
  • 位操作符

    1 & 1 = 11 & 0 = 00 & 1 = 00 & 0 = 0; // 全1为1
    1 | 1 = 11 | 0 = 10 | 1 = 10 | 0 = 0; // 有1为1
    1 ^ 1 = 01 ^ 0 = 10 ^ 1 = 10 ^ 0 = 0; // 相反为1
    
    • &按位与操作符 运算规则:全1为1
    • | 按位或操作符 运算规则: 有1为1
    • ^ 按位异或操作符 运算规则: 相反为1
  • 赋值操作符
    这再熟悉不过了 = 当我们多变量赋值时我们就需要用到它

    // 连续赋值
    int a =0;
    int x = 1;
    int y = 4;
    a = x = y + 1;
    
    • 复合操作符
    操作符例子转换
    +=x += 1x = x + 1
    -=x -= 1x = x - 1
    /=x /= 1x = x / 1
    %=x %= 1x = x % 1
    >>=x >>= 1x = x >> 1
    <<=x <<= 1x = x << 1
    &=x &= 1x = x & 1
    丨=x 丨= 1x = x 丨 1
    ^=x ^= 1x = 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趣谈,一位在读学生的技术提升之路,为您提供一系列我在学习路上的笔记,经验,以及感悟。往与君共勉,共同进步! 欢迎大家来关注哦!
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值