C语言操作符——详解

简介: C语言操作符——详解

这么快与大家又见面了,今天给大家推出一期关于==操作符==相关的作品,希望能够带大家真正大了解操作符中的==坑==和==小技巧==:sunglasses::sunglasses::sunglasses:
在这里插入图片描述

一、操作符的分类

==算术操作符==
==移位操作符==
==位操作符==
==赋值操作符==
==单目操作符==
==关系操作符==
==逻辑操作符==
==条件操作符==
==逗号表达式==
==下标引用、函数调用和结构成员==

二、算术操作符

+ - * / %

相信大家对+,-,*没有什么疑问,那么就针对/,%对大家进行讲解。

int a=1/2;
int b=1%2;
int a=1.0/2;
int c=1/2.0;
运行后的结果是a=0,b=1,c=0.5,d=0.5,==为什么a不是0.5尼?== 因为在C语言规定中两个整数相除,向零取整,只要把分子或者分子改为浮点数就可以解决,比如c,d。==%计算的是整出后的余数==

三、移位操作符

<< 左移操作符
>> 右移操作符
注:移位操作符的操作数只能是整数。==移位操作符,移动的是二进制位==
int main() {
    int a = 7;
    //左移操作符
    //移动的是二进制位
    int b = a << 1;
    printf("a=%d\n", a);//a=7
    printf("b=%d\n", b);//b=14
    return 0;
}

在这里插入图片描述
左移操作符:左边丢弃,左边补零

int main() {
    int a = -7;
    //右移操作符
    //移动的是二进制位
    int b = a >> 1;
    printf("a=%d\n", a);//a=-7
    printf("b=%d\n", b);//b=-14
    return 0;
}

在这里插入图片描述

右移操作符:
==算数移位:==右边丢弃,左边补原符号位
警告⚠ :
对于移位运算符,不要移动负数位,这个是标准未定义的。

例如:

int num = 10;
num>>-1;//error

四、位操作符

==& 按位与==
==| 按位或==
==^ 按位异或==
注:他们的操作数必须是整数。
int main()
{
 int num1 = 1;
 int num2 = 2;
 num1 & num2;
 num1 | num2;
 num1 ^ num2;
 return 0;
}
位运算是针对二进制的。
&运算有1为1,全0为0.
|运算,有0为0,全1为1.
^运算,相同为0,不同为1

1、小试牛刀

一道变态的面试题:
不能创建临时变量(第三个变量),实现两个数的交换

法1:

int main() {
    int a = 1;
    int b = 2;
    a = a + b;
    b = a - b;
    a = a - b;
    printf("%d %d", a, b);
}

在这里插入图片描述

这里确实可以进行两个数交换,但进行了==a+b==,如果a和b相当大的时候,相加后会进行整形的溢出造成结果的错误。

:point_down: :point_down: :point_down:下面用我们刚刚学习的位操作符进行操作:

int main()
{
 int a = 1;
 int b = 2;
 a = a^b;
 b = a^b;
 a = a^b;
 printf("a = %d b = %d\n", a, b);
 return 0;
}

在这里插入图片描述

2、练习题1

1.统计二进制中1的个数
int main() {
    int n = 0;
    scanf("%d", &n);
    int count = 0;
    while (n) {
        
        if (n&1) {
            count++;
        }
        n >>= 1;
    }
    printf("%d", count);
    return 0;
}

3、练习题2

2.求两个数二进制中不同位的个数
int main() {
    int a = 0;
    int b = 0;
    scanf("%d %d", &a, &b);
    int count = 0;
    while (a != b) {
        if ((a % 2) != (b % 2)) {
            count++;
        }
        a /= 2;
        b /= 2;
    }
    printf("%d", count);
    return 0;
}

4、练习题3

3.打印整数二进制的奇数位和偶数位
int main() {
    int n = 0;
    scanf("%d", &n);
    int i = 0;
    for (i = 31; i >= 1; i -= 2) {
        printf("%d ", (n >> i) & 1);
    }
    printf("\n");
    for (i = 30; i >= 0; i -= 2) {
        printf("%d ", (n>> i) & 1);
    }
    return 0;
}

五、赋值操作符

==赋值操作符==可以对我们不满意的变量进行重新赋值
int main(){
   double high=1.70;//对身高进行初始化
   //但对这个身高不满意,可以进行赋值
   high=1.80;
   return 0;
}
:sunny::sunny::sunny: 当然还有一些复合赋值操作符

在这里插入图片描述

int main(){
   int a=0;
   a+=3;//相当于a=a+3;
   a>>=1;//相当于a=a>>1
   return 0;
}
:mag_right::mag_right::mag_right: 这一期操作符就更新到这里了,如果大家感觉有帮助的话记得一键三连,我会继续更新的

在这里插入图片描述

目录
相关文章
|
3月前
|
存储 C语言 索引
【C语言篇】操作符详解(下篇)
如果某个操作数的类型在上⾯这个列表中排名靠后,那么⾸先要转换为另外⼀个操作数的类型后执⾏运算。
72 0
|
3月前
|
程序员 编译器 C语言
【C语言篇】操作符详解(上篇)
这是合法表达式,不会报错,但是通常达不到想要的结果, 即不是保证变量 j 的值在 i 和 k 之间。因为关系运算符是从左到右计算,所以实际执⾏的是下⾯的表达式。
238 0
|
15天前
|
存储 缓存 C语言
【c语言】简单的算术操作符、输入输出函数
本文介绍了C语言中的算术操作符、赋值操作符、单目操作符以及输入输出函数 `printf` 和 `scanf` 的基本用法。算术操作符包括加、减、乘、除和求余,其中除法和求余运算有特殊规则。赋值操作符用于给变量赋值,并支持复合赋值。单目操作符包括自增自减、正负号和强制类型转换。输入输出函数 `printf` 和 `scanf` 用于格式化输入和输出,支持多种占位符和格式控制。通过示例代码详细解释了这些操作符和函数的使用方法。
30 10
|
1月前
|
存储 编译器 C语言
【C语言】简单介绍进制和操作符
【C语言】简单介绍进制和操作符
152 1
|
1月前
|
存储 编译器 C语言
初识C语言5——操作符详解
初识C语言5——操作符详解
163 0
|
3月前
|
C语言
C语言操作符(补充+面试)
C语言操作符(补充+面试)
45 6
|
3月前
|
存储 编译器 C语言
十一:《初学C语言》— 操作符详解(上)
【8月更文挑战第12天】本篇文章讲解了二进制与非二进制的转换;原码反码和补码;移位操作符及位操作符,并附上多个教学代码及代码练习示例
56 0
十一:《初学C语言》—  操作符详解(上)
|
4月前
|
C语言
五:《初学C语言》— 操作符
本篇文章主要讲解了关系操作符和逻辑操作符并附上了多个代码示例
43 1
五:《初学C语言》—  操作符
|
5月前
|
C语言
C语言逻辑操作符的短路问题
C语言逻辑操作符的短路问题
|
5月前
|
编译器 C语言
【C语言】:中移位操作符,位操作符详运算规则详解
【C语言】:中移位操作符,位操作符详运算规则详解
40 1