iOS学习笔记第2天——C基础:运算符

来源:互联网 发布:dorado7 js 编辑:程序博客网 时间:2024/05/12 23:18

一、运算符(执行特定算数或逻辑操作的符号)

    1.关系运算符的结果01代表什么

       0代表假 1代表真

       1 > 0结果为1(真)


    取模只能用整数类型

    取模运算的正负性,取决于左边的操作数

    取模左边的数,小于右边数的时候,得数就是左边数


    2. 运算符分类

        按照功能分为

          1>算术运算符

          2>关系运算符与逻辑运算符

          3>按位运算符


        根据参与运算的操作数的个数分为

          1>单目运算

              只有一个操作数: a++, !,sizeof

          2>双目运算符

              两个操作数: a+b, a%b

          3>三目运算符

              C中仅此一个: a > b ?1 : 0


    3. 运算符的优先级

          分为15级,不需要死记硬背: ()小括号是1


    4. 结合性

        1>左结合性:普通运算,从左至右2 * 4 + 3

        2>右结合性:赋值运算,将等号右边的值赋给左边的变量: a = b =10;


二、算术运算符(+-*/%)

    1. 注意点

        1>隐式类型转换// 大类型转换为小类型时,会丢失精度

            只有相同类型的数据才能进行运算,如果在计算过程中类型不同,则会自动将小类型转换为大类型

              int a = 10 + 2.8 -> 10.0 + 2.8 -> 12.8

              // int = int(4) + doulbe(8)

            之后在赋值的时候会再次进行一次隐式转换,会将计算结果转换为变量的类型,这样就会丢失精度

              a = 12;

        2>强制类型转换//将数据类型强制转换为另一种

            int number = (int)10.9

        3>自动类型提升// 将参与运算的数据转换为同一类型 ->转换为运算数中最大的类型

            int number = 10 + 10.9  -> 10.0 + 10.9

        4>在运算过程中,参与运算的是什么类型,计算结果就是什么类型

            double num1 = 1 / 2;

                 num1 = 0.0;// 由于运算数1,2都是int,因此计算结果也是int=0,但由于赋值给double,因此进行了隐式转换为0.0

            double num2 = (double)1 /2;

                 num2 = 0.5;// 1强制转换为double2会由于自动类型提升转换为double,最后赋值给double = 0.5

            double num3 = (double)(1 /2);

                 num3 = 0.0;// 由于小括号的运算优先级最高,因此先计算1/2,两个int计算结果为0,之后强制转换为0.0


    2. 模运算 %

        1>模运算符只能作用于整数

            int num1 = 10 % 3; // 1

            int num2 = 12 % 5; // 2

            double num3 = 12.2 % 5.0; // 错误格式,报错

        2>模运算符的计算结果的正负性,取决于左边的操作数

            int num1 = -10 %3; // -1

            int num2 = 10 % -3; // 1

        3>如果左边操作数 < 右边操作数,结果为左边操作数

            int num1 = 2 % 9; // 2


二、赋值运算符(=, +=, -=, *=, /=, %=)

    1. 赋值表达式(右结合性)

        int num = 10 + 5; // 等号左边必须是变量

        int num2 = 10;

        num2 += 5; // 15

        num2 *= 2; // 30


    2.赋值运算符的优先级比算数运算符低


    3. 符合赋值运算符

        int a = 5;

        a *= 1 + 2;// a = (1 + 2) * 5


三、自增、自减运算符(++, --)

    1. 格式(先用后变)

        int i = 1;

        i++; // i = i + 1; i = 2

        i--; // i = i - 1; i = 1


    2. 格式(先变后用)

        int j = 1;

        int k = 1;

        k = ++j; // k = 2, j = 2   j会先自增,然后赋值给k

        k = j++; // k = 2, j = 3   j会先赋值给k,然后再自增


    3. 注意

       1>自增、自减只能运用于"单个"变量

            int i = j++ + k++ // 合法

       2>++在前先++++在后后++


四、逗号运算符(,) //仅了解

    1. 运算方式

        变量 =表达式1,表达式2,表达式3, .....表达式n

        算式会根据逗号来依次计算每个表达式的值:表达式1运算结束后 ->表达式2运算 ->表达式3运算。。。


    2. 计算结果:

         变量 =表达式n


    3.在运算中尽量不要使用逗号表达式,只当做分隔符用


五、sizeof(计算所占字内存字节数)

    1.可以计算变量, 常量,数据类型所占内存的字节数

        int number = sizeof(10);

        int number2 =sizeof 10; // 如果是常量,括号可以省略,但是要加一个空格

        double doubleValue = 0;

        int number4 = sizeof doubleValue; // 如果是变量,括号也是可以省略的

        int number3 = sizeof(int); // 如果计算数据类型,则括号不能省略


    2.sizeof是一个运算符,而不是一个函数!!!


六、关系运算符(>, <, >=, <=, ==, !=)

    1.关系运算符的返回值只有两种: 01//真或假

        int a = 3 >2; // 输出1

        int b = 3 <2; // 输出0


        int num1 = 10;

        int num2 = 20;

        int num3 = 10;

        int x = num1 == num2; // 输出0

        int y = num1 == num3; // 输出1


    2.关系运算符的优先级

        >, <, >=, <= 是同一级,而==, !=的优先级比较低

        int a =10 == 4 > 3;// a = 10 == 1 -> a = 0

        int b = 0 !=4 > 3; // b = 0 != 1 -> b = 1


七、逻辑运算符

    1. &&逻辑与 (一假则假,同真才真)

        int a = 4 >3 && 5 > 3;

        //  a =   1   &&   1  --> a = 1

        int b = 4 >6 && 5 > 3

        //  b =   0   &&   0  --> b = 0

      判断x是否在(1,10)之间

        int x = 1 < x && x <10


    2. ||逻辑或 (一真则真,同假才假)

        int a = 4 >3 || 4 < 1;

        //  a =   1   ||   0  --> a = 1

        int b = 4 >5 || 4 < 1;

        //  b =   0   ||   0  --> b = 0


    3. !逻辑非 (表达式取反)

        int a = !(10 >9);

        //  a = !1 --> a = 0;

        int b = !(10 <9);

        //  b = !0 --> b = 1;

      多个非运算符的运算顺序:右至左

        int a = !!!!!(10 >5);

        //  a = 0


    4.注意: C语言中任何数值都有真假性 ———0即真

        int a = 1 &&12; // a = 1;

        int b = 1 &&0; // a = 0


    5.逻辑运算符的短路

        1> &&

            int a = 0;

            int num =10 < 5 && a++; //由于&&一假则假的特性,当10 < 5为假时,a++就不会运行了,因此a = 0num = 0

        2> ||

            int b = 0;

            int num2 =10 > 5 || b++; // ||是一真则真,当10 > 5已经为真,那么b++就不会运行,因此b = 0, num2 = 1


    6.逻辑运算符的优先级

        逻辑非 >算数运算符 > &&|| >赋值运算符

        int a = !0 && (3 +2); // a = 1

        int b = !0 +4; // b = 5;

        int c =4 > 3 && 5 >2 || 4 < 10;// c = (4 > 3 && 5 > 2) || 4 < 10 -- > 1 || 4 < 10 --> c = 1;


八、三目运算符(条件运算符)// C中唯一一个三目运算符

    1. 格式

        int a = 10;

        int b = 20;

        int max = a > b ? a : b;  // max = b

            // 1. 先判断a > b

            // 2. 如果为真,max = a

            // 3. 如果为假,max = b


    2. 注意点

        优先级:算术运算符 > 条件运算符 >赋值运算符

        int max2 = a + 50 > b ? a + 20 : b + 10;

            // 1. 先计算 a + 50

            // 2. 判断 a + 50 > b

            // 3. 条件为真,运行a + 20

            // 4. max2 = a + 20;

            // 5. 期间ab的值并没有改变





0 0
原创粉丝点击