zoukankan      html  css  js  c++  java
  • C语言学习笔记之 运算符

    运算符

    算术运算符

    运算符 含义 举例 结果
    + 正号运算符(单目运算符) +a a的值
    - 负号运算符(单目运算符) -a a的算术负值
    * 乘法运算符 a * b a和b的乘积
    / 除法运算符 a / b a和b的商
    + 加法运算符 a + b a和b的和
    - 减法运算符 a - b a和b的差
    % 求余运算符 a % b a除以b的余数

    注意!其中除法运算符两端都是整型时,结果会舍去小数部分,即取整后向零靠拢

    例:

    3 / 2; // 返回1
    -5 / 3; // 返回-1
    

    自增、自减运算符

    ++i,--i; // 在使用i之前,先使i的值加(减)1
    i++,i--; // 在使用i之后,再使i的值加(减)1
    

    注意!自增、自减运算符只能用于左值

    ++i与i++的对比

    // main.c
    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    
    int main() {
    	int i = 0;
    
    	// i++
    	i++;
    
    	//++i
    	++i;
    
    	return 0;
    }
    int data = 0;
    

    用VS查看其汇编代码:

    看不出区别,接着用Python来测试

    // i++.c
    int main() {
        for (int i = 0; i < 100000000; i++) {
            ;
        }
        return 0;
    }
    
    // ++i.c
    int main() {
        for (int i = 0; i < 100000000; ++i) {
            ;
        }
        return 0;
    }
    

    结论:++i比i++效率高,且循环次数越多,差距越明显

    强制类型转换运算符

    语法:

    (类型名)(表达式);
    

    例:

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    
    int main() {
    	double a = 3.14;
    	a = (int)a;
    	printf("%d
    ", a);
    
    	int b = 64;
    	b = (char)b;
    	printf("%c
    ", b);
    
    	int c = 2;
    	c = (double)c;
    	printf("%.2f
    ",c);
    
    	return 0;
    }
    

    运行结果:

    0
    @
    0.00
    

    注意!强制类型转换很可能会造成精度丧失

    条件运算符(三目运算符)

    语法:

    表达式1 ? 表达式2 : 表达式3
    

    如果表达式1的值非0,返回表达式2,否则返回表达式3

    例:

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    
    int main() {
    	int a, b;
    	printf(">");
    	scanf("%d %d", &a, &b);
    	getchar();
    
    	int max = (a > b) ? a : b;
    	printf("max = %d", max);
    
    	return 0;
    }
    

    运行结果:

    >1 2
    max = 2
    
    int max = (a > b) ? a : b;
    相当于:
    if (a > b) {
       int max = a;
    } else {
       int max = b;
    }
    

    指针运算符

    • 和&(在指针中会讲)

    & 取地址运算符

    &对象 返回该对象的内存地址

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    
    int main() {
    	int a = 0;
    	printf("a的地址:%p", &a);
    
    	return 0;
    }
    

    运行结果:

    a的地址:000000AC23D8F554
    

    关系运算符

    运算符 含义
    == 等于
    < 小于
    > 大于
    >= 大于等于
    <= 小于等于
    != 不等于

    逻辑运算符

    运算符 含义 举例 结果
    ! 逻辑非 !0 1
    && 逻辑与 1 && 0 0
    || 逻辑或 1 || 0 1

    例:

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdbool.h>
    
    int main() {
    	_Bool bool_true = true;
    	_Bool bool_false = false;
    
    	// true = 1; false = 0
    	printf("1 || 1 = %d
    ", (bool_true || true));
    	printf("1 || 0 = %d
    ", (bool_true || bool_false));
    	printf("0 || 0 = %d
    ", (bool_false || false));
    	printf("1 && 1 = %d
    ", (bool_true && true));
    	printf("1 && 0 = %d
    ", (bool_true && bool_false));
    	printf("0 && 0 = %d
    ", (bool_false && false));
    	printf("!1 = %d
    ", (!bool_true));
    	printf("bool_true = %d
    ", bool_true);
    
    	return 0;
    }
    

    运行结果:

    1 || 1 = 1
    1 || 0 = 1
    0 || 0 = 0
    1 && 1 = 1
    1 && 0 = 0
    0 && 0 = 0
    !1 = 0
    bool_true = 1
    

    优先级

  • 相关阅读:
    深度学习一:安装MXnet包,实现MNIST手写数体识别
    深度学习二:Neural art:用机器模仿梵高
    【Stanford CNN课程笔记】1. Image Classification and Nearest Neighbor Classifier
    PHP之图形处理
    Ubuntu14.10+cuda7.0+caffe配置
    CentOS系统上编译、安装、配置OpenCV
    安装MXnet包,实现MNIST手写数体识别
    Neural art:用机器模仿梵高
    String to Integer (atoi)
    Wildcard Matching
  • 原文地址:https://www.cnblogs.com/zhujiangyu/p/13589409.html
Copyright © 2011-2022 走看看