• 黑马程序员-关于C语言基本运算的一些注意点


    C语言为何这么强大呢?其中之一就是因为他拥有强大的运算能力,除了简单的加减乘除等算术运算,还有取余运算(%)、赋值运算(=)、自增自减运算(++、--)、求字节数(sizeof)、关系运算(==、>、<、>=、<=)、逻辑运算(与、或、非)以及三目运算(条件?数值1:数值2)
    下面我列出其中的一些小细节
    第一个程序:
    #include<stdio.h>
    int main(){

    int a = -10 % 3;
    printf("%d ",a);

    }
    对比
    #include<stdio.h>
    int main(){

    int a = 10 % -3;
    printf("%d ",a);

    }
    第一程序输出的结果是:-1,第二个的输出结果是:1
    结论:取余运算(或者叫模运算)的两边首先必须是整数(可以是负数),余数的正负依赖%前边数值的正负

    第二个程序
    #include<stdio.h>
    int main(){

    int a = 10.5;
    printf("%d ",a);

    }

    第三个程序
    #include<stdio.h>
    int main(){

    double b = 11/4;
    printf("%d ",b);

    }
    第二个程序的输出结果是:10,第三个程序的输出结果是:3
    结论:因为a为int型,而10.5是double型所以将double自动转换成int型,我们也可以这样改:
    int a = (int) 10.5;
    这种方法是强制类型转换;第三个程序中由于10和4都为整型数值所以输出结果肯定是整型,即使b的类型是double型,结果还是3,要想结果变成3.75,可以这样修改:
    double b = 9.0/4;或者double b = 9/4.0;或者double b = (double)9/4;

    第四个程序
    #include<stdio.h>
    int main(){
    int a = 4;
    a *= 2 + 3;
    printf("%d ",a);

    }
    这个程序的输出结果是:20
    结论:复合赋值运算符后面是一个整体,相当于一个小括号将他们括起来了,之后再作相应的复合赋值

    第五个程序
    #include<stdio.h>
    int main(){
    int a = 4;
    printf("%d,%d ",a,a++);

    }

    第六个程序
    #include<stdio.h>
    int main(){
    int a = 4;
    printf("%d,%d ",++a,a);

    }
    这两个程序的结果都是:5,4
    结论:为啥会是这个结果呢?首先我们要理解a++与++a的区别,前者是先将数值a的原值执行运算,后将数值增一,后者正好相反,先将原值增一,然后执行计算,至于为啥两者结果都是一样,这是由于printf函数在编译器中的计算顺序是从右往左,(因编译器不同,也可能是从左往右)所以导致了这样的结果

    第七个程序
    #include<stdio.h>
    int main(){
    int a = 4;
    printf("%d,%d,%d ",sizeof a,sizeof 4,sizeof (int));

    }
    输出结果为:4,4,4
    结论:只需要注意sizeof后面要是跟上的是基本类型标识符的话 必须加上小括号其他的可加可不加

    至于关系运算符我们需要注意的每一个关系运算式都有个一返回值(非0即1,0的话即为假,1的话即为真),逻辑与和逻辑或的集合方向都是自左向右,逻辑运算符的两边一般是能判断出真假的条件,但是也可以跟上任何一个常数,非0常数表示真,0即为假

    第八个程序
    #include<stdio.h>
    int main(){
    int a = 4;
    int b = 6;
    int c= a<3 && b++;
    printf("%d,%d,%d ",a,b,c);

    }
    输出结果为4,6,0
    结论:当判断完逻辑与左边的为假时,C语言是不会判断右边的真假,直接得出结果,同理,要是判断完逻辑或左边的为真时,他也是不会进行右边真假的判断的

    C语言中,运算也是有一定的先后顺序,就像我们小学里学到的要先乘除后加减有括号的先算括号,C语言中各种运算也是要讲究运算的优先级别的,我们就拿三目运算来说,请看代码:
    int main()
    {

    int c = 10;
    int d = 24;

    //将c和d中较大者与2相加赋值给变量a
    int a = 2 + (c > d)? c : d;
    printf("%d ",a);

    return 0;
    }

    当我们编译连接的时候Xcode会警告我们的,因为+的优先级别高于三目运算符,所以你这样先完后 ?的前面永远是真,程序始终会将c的值加2赋值给a,所以只有将程序的第三行代码改为:int a = 2 + ((c > d)? c : d); 这样才会保证你想要的结果。

    结论:当我们用到C语言进行一些运算时,一定要注意优先顺序,一旦一个式子中有过多的运算符,一般他的可读性是很差的,这时我们就要将复杂的算式拆成多行代码,保证程序的可读性,另一方面也能保证程序会按照我们的思路进行下去。

  • 相关阅读:
    C语言I博客作业06
    C语言I博客作业05
    C语言I博客作业04
    C语言I博客作业03
    C语言I博客作业02
    作业01
    java ui 点点记
    eclipse修改workspace目录
    postgres恢复
    JDK1.4和JDK1.5以及1.6
  • 原文地址:https://www.cnblogs.com/oucding/p/4385502.html
Copyright © 2020-2023  润新知