【C语言】运算符注意点

运用异或交换2个数的值

这种利用位运算的交换方法只适用于整型变量,不能用于浮点型变量!

#include <stdio.h>


int main()
{
    unsigned char x = 155;
    unsigned char y = 200;
/*
    x = x ^ y;
    y = x ^ y;
    x = x ^ y;
*/
    x ^= y ^= x ^= y;
    printf("x = %d, y = %d\n", x, y);
}

利用位与 & 运算,判断一个整数是否是2的整数次幂

int func(int num)
{
    return ((num > 0) && ((num & (num - 1)) == 0));//2的n次幂大于0
}

对取余运算的说明

取余,也就是求余数,使用的运算符是 %。C 语言中的取余运算只能针对整数,也就是说,% 的两边都必须是整数,不能出现小数,否则编译器会报错。

另外,余数可以是正数也可以是负数,由 % 左边的整数决定:

  • 如果 % 左边是正数,那么余数也是正数;
  • 如果 % 左边是负数,那么余数也是负数;
100 % 12 = 4
100 % -12 = 4
-100 % 12 = -4
-100 % -12 = -4 

不同长度的数据进行位运算

如果两个不同长度的数据进行位运算时,系统会将二者按右端对齐,然后进行位运算。

  1. 如果整型数据为正数,左边补 16 个 0。
  2. 如果整型数据为负数,左边补 16 个 1。
  3. 如果整形数据为无符号数,左边也补 16 个 0。
unsigned char a = 1;
short b = 123;
printf("%d", a & b); //结果为1

char a = 1;
short b = 123;
printf("%d", a & b); //结果为1

char a = -1;
short b = 123;
printf("%d", a & b); //结果为123

| 和 ||,& 和 && 的区别

举个例子,a=1 b=2
所以 a>0 这个值为true    b>1 这个值为true     b>2 这个值为 false
如 if(a>0&b>1)  我们可以得出 if(true&true),条件成立(true不为0,所以true&true不为0)
如 if(a>0&&b>1)  我们可以得出 if(true&&true),条件成立(&&两边操作数都非零,所以条件成立)
如 if(b>2&a>0) 我们可以得出 if(false&true),条件不成立(false为0,false&true为0,条件不成立)
如 if(b>2&&a>0) 我们可以得出 if(false&&a>0),条件不成立(&&左侧为false,&&运算到此结束,条件不成立)

& 和 && 在判断语句中都可以实现“和”这个功能,不过区别在于 & 两边都运算,而 && 先算 && 左侧,若左侧为 false 那么右侧就不运算了。因此从效率上来说,判断语句中推荐使用 &&。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值