美文网首页程序员iOS Developer
iOS开发 -- C语言基础4(基本语句和运算符)

iOS开发 -- C语言基础4(基本语句和运算符)

作者: 你以为的只是你以为 | 来源:发表于2016-03-29 09:26 被阅读152次

    iOS开发 -- C语言基础4(基本语句和运算符)

    基本语句

    C语言的基本语句跟Java中的差不多,所以,这里只是简单地提一下

    循环语句(do while、while、for)

    条件语句(if 、if-else、switch)

    goto语句

    基本运算

    计算机的基本能力就是计算,所以一门语言的计算能力十分重要。C语言之所以无所不能,很大原因在于它有强大的计算能力。C语言一共有34种运算符,其中的大多数运算符跟在Java中的用法是一样的。下面做一个简单介绍。

    一、算术运算符

    ①. 加法:+ 还可以表示正号

    ②. 减法:- 还可以表示负号

    ③. 乘法:* 非数学意义上的X

    ④. 除法:/  注意1/2的值为0而非0.5

    ⑤. 取余(模运算):两个整数相除之后的余数(注意两边都必须是整数,带符号只和左值有关)

    注意点:

    ①. Int a=10.8;//数据精度丢失警告。结果为10——自动类型转换

    ②. Int a=(int)10.8;//无警告。把10.8强制转换为整型——强制类型转换

    ③. Double c=10.6+6//结果为16.600000。在计算机中,拿两个数值进行运算,则运算符两边的数值需要类型相同,如果不同则进行自动类型提升。即把6转为6.000000后再参与运算。

    ④. 参与运算的两个数是什么类型,那么其结果就是什么类型。int a=10/3结果为3,double b=10/3结果为3.000000;double c=10.0/3结果为3.333333。要求精确值可以进行强制类型转换。double d=(double)3/2把3转换为double类型变为3.000000,之后2进行自动类型提升转变为2.000000参与运算,结果为1.500000。也可以写成3/(double)2。这种情况需要注意与对整体进行强制转换的区别 double e=(double)(3/2)是先计算3/2的值为1再对1进行强制类型转换,结果为1.000000。

    二、关系运算符

    <  小于运算符

    <=  小于等于运算符

    >  大于运算符

    >=  大于等于运算符

    ==  等于运算符

    !=  不等于运算符

    * 关系运算的结果成立就为"真"(比如5>=4),不成立则为"假"(比如5<4)

    * 在Java中,关系运算的结果为"真"就返回true,"假"则返回false,用boolean类型的变量来接收

    boolean b1 = 5 > 4; // true

    boolean b2 = 5 < 4; // false

    C语言中没有boolean类型

    * 在C语言中,关系运算的结果为"真"就返回1,"假"就返回0

    int a1 = 5 > 4; // 1

    int a2 = 5 < 4; // 0

    * 还需注意的是,在C语言中,任何非0值都为"真",只有0值才为"假"

    所以下面的做法是对的:

    int a = 10;

    if (a) {

    printf("条件成立");

    } else {

    printf("条件不成立");

    }

    因为a不为0,所以为"真",输出结果是:

    若是在Java中,编译器直接报错了,因为if的括号()中只能放boolean类型的值。

    以此类推,下面的写法也是对的:

    int a = 10;

    if (a = 0) {

    printf("条件成立");

    } else {

    printf("条件不成立");

    }

    上述代码是完全合理的,编译器不会报错,只是个警告而已。因为a为0,所以为"假",输出结果是:

    这样看来,C语言似乎比Java方便很多,其实有很大的陷阱在这里:

    假设你本来是想判断a是否为0,那么本应该写if (a == 0),若你误写成了if (a = 0),那将是一件非常可怕的事情,因为编译器又不报错,这样的BUG就难找了。因此,像a==0这样的表达式,最好写成0==a,若你误写成0=a,编译器会直接报错的。

    // 不推荐

    if (a == 0) {

    }

    // 推荐

    if (0 == a) {

    }

    * 在C语言中,可以不保存关系运算的结果

    因此,下面的写法是合法的:

    1 int a = 10;

    2 a > 10;

    3 a == 0;

    如果是在Java中,第2、3行编译器会直接报错,但在C编译器看来是合法的,只是个警告。

    所以,这里又是一个陷阱,假设你的本意是想给a赋值为0,那么本应该写a = 0; ,若你误写成a == 0; ,那将又是一个非常难找的BUG,因为编译器根本不会报错。在1993年的时候,这个BUG差点让一桩价值2000万美元的硬件产品生意告吹,因为如果这个BUG不解决,这个产品就没办法正常使用。

    三、逻辑运算符

    &&  逻辑与运算符

    ||  逻辑或运算符

    !  逻辑非运算符

    逻辑运算的结果也只有两个:成立就为"真",返回1;不成立就为"假",返回0

    ①. 与  &&  条件1&&条件2 只有的那个条件1和条件2都成立时,才为真否则为假。

    ②. 或  ||    条件1 ||条件2  当条件1或条件2中有一个成立时就为真,都不成立时为假。

    ③. 非  !  !条件  取反

    注意:逻辑运算符在进行运算时,只要能够确定整体的真假性,后面的条件就不再进行而是直接忽略。

    Int a=b=10;

    Int c=(a>5)&&(++b>=11);//此时a==10,b==11,c==1

    Int c=(a<5)&&(++b>=11);//此时a==10,b==10,c==0

    提示:在进行逻辑运算时,如果搞不清楚各个符号的优先级,可以使用()。

    四、赋值运算符

    1.简单的赋值运算符 = :int a = 5;

    2.复合赋值运算符

    +=  加赋值运算符。如a += 3+1,等价于 a = a +(3+1)

    -=  减赋值运算符。如a -= 3+1,等价于 a = a -(3+1)

    *=  乘赋值运算符。如a *= 3+1,等价于 a = a *(3+1)

    /=  除赋值运算符。如a /= 3+1,等价于 a = a /(3+1)

    %=  取余赋值运算符。如a %= 3+1,等价于 a = a %(3+1)

    五、自增运算符和自减运算符

    ++  自增运算符。如a++,++a,都等价于a = a+1

    --  自减运算符。如a--,--a,都等价于a = a-1

    六、逗号运算符和逗号表达式

    * 逗号运算符主要用于连接表达式,例如:

    1 int a = 9;

    2 int b = 10;

    3

    4 a = a+1 , b = 3*4;

    * 用逗号运算符连接起来的表达式称为逗号表达式,它的一般形式为:

    表达式1, 表达式2, … …, 表达式n

    逗号表达式的运算过程是:从左到右的顺序,先计算表达式1,接着计算表达式2,...,最后计算表达式n

    * 整个逗号表达式的值是最后一个表达式的值

    int a = 2;

    int b = 0;

    int c;

    c = (++a, a *= 2, b = a * 5);

    printf("c = %d", c);

    ++a的结果为3,a *= 2的结果为6,b = a * 5的结果为30。因此,输出结果为:

    这里要注意的是,右边的表达式是有用括号()包住的,如果不用括号包住,也就是:

    c = ++a, a *= 2, b = a * 5;

    printf("c = %d", c);

    输出结果将为:

    因为c = ++a也属于逗号表达式的一部分,跟后面的a *= 2以及b = a * 5是相互独立的

    七、条件运算符和条件表达式

    其实就是三目运算符,一般形式为:表达式1 ? 表达式2 : 表达式3

    int a = (b > 5) ? 10 : 9;

    八、sizeof

    * sizeof可以用来计算一个变量或者一个常量、一种数据类型所占的内存字节数。

    int size = sizeof(10);

    printf("10所占的字节数:%d", size);

    输出结果:

    10是int类型的数据,在64bit编译器环境下,int类型需要占用4个字节

    * sizeof一共有3种形式

    sizeof( 变量\常量 )

    sizeof(10);

    char c = 'a';

    sizeof(c);

    sizeof  变量\常量

    sizeof 10;

    char c = 'a';

    sizeof c;

    sizeof( 数据类型 )

    sizeof(float);

    注意,不可以写成sizeof float;

    相关文章

      网友评论

        本文标题:iOS开发 -- C语言基础4(基本语句和运算符)

        本文链接:https://www.haomeiwen.com/subject/xxqslttx.html