zoukankan      html  css  js  c++  java
  • Day 03

    1.算术运算的注意点

    • 强制类型转换
      double a = (double)1 / 2;
      double b = (double)(1 / 2);// 错误写法,结果为0
    • 求余运算结果的正负性取决于第一个运算数,跟后面的运算数无关

    2.类型转换问题

    • 2.1自动转换(隐式转换):

      • 自动转换发生在不同数据类型的量混合运算时,由编译系统自动完成。
      • 自动转换遵循以下规则:
        • 相同数据型的才能行运算(比如加法运算),而且运算果依然是同一种数据型。系会自动对占用内存少的型做一个动类型提升的操作
        • 若参与运算量的类型不同,则先转换成同一类型,然后进行运算。
        • 转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转 成long型后再进行运算。
        • 所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成 double型,再作运算。
        • char型和short型参与运算时,必须先转换成int型。
        • 在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度。
    • 2.2强制类型转换(显示转换):

    • 强制类型转换是通过类型转换运算来实现的
    • 其一般形式为:(类型说明符) (表达式)
    float floatValue = 10.1f;
    int sum = 4 + (int)floatValue ;
    printf("sum = %d", sum);// 输出14
    //  floatValue本身的值并没有改变
    printf("floatValue = %f", floatValue); // 输出10.100000

    3.复合赋值运算符

    构成复合赋值表达式的一般形式为:
    变量 双目运算符 = 表达式; 如: a *= 1 + 2;
    它等效于
    变量 = 变量 双目运算符 表达式; 如: a = (1 + 2) * a;

    注意:赋值运算符优先级排名14位,仅仅高于“,”运算符。

    4.自增、自减运算符求值过程

    • 前缀表达式:++x, --x;其中x表示变量名,先完成变量的自增自减1运算,再用x的值作为表达式的值;即先变后用,也就是变量的值先变,再用变量的值参与运算。
    • 后缀表达式:x++, x--;先用x的当前值作为表达式的值,再进行自增自减1运算。即先用后变,也就是先用变量的值参与运算,变量的值再进行自增自减变化。

    5.sizeof

    • sizeof可以用来计算一个变量或一个常量、一种数据类型所占的内存字节数
    • 注意: sizeof不是一个函数, 是一个运算符. (面试题)

    6.逗号运算符

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

    • 逗号表达式的运算过程是:先算表达式1,再算表达式2,依次算到表达式n
    • 整个逗号表达式的值是最后一个表达式的值

    7.关系运算符优先级

    • 关系运算符中==、!=的优先级相等,<、<=、>、>=的优先级相等,且前者的优先级低于后者
    • 关系运算符的优先级小于算术运算符
      • 例如2==3>1:先算3>1,条件成立,结果为1。再计算2==1,条件不成立,结果为0。因此2==3>1的结果为0。
      • 例如3+4>8-2:先计算3+4,结果为7。再计算8-2,结果为6。最后计算7>6,条件成立,结果为1。因此3+4>8-2的结果为1。

    8.三目运算符

    • 条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。
    • 条件运算符的结合方向是从右至左
    ·        例如:
    ·        max=(a>b)? a:b;
    ·        可以去掉括号而写为:
    ·        max=a>b?a:b;
    ·        例如:
    ·        a>b?a:c>d?c:d;
    ·        应理解为:
    ·        a>b?a:(c>d?c:d)

    9.产生随机数

    · //如何进行随机出拳,借助一个stdlib.h下一个产生随机数的函数
    · // arc4random_uniform(n) 0~n-1之间的随机的整数
    #include <stdio.h>
    #include <stdlib.h>

    int main(int argc, const char * argv[]) {
        
        //1.1提示用户 0代表石头; 1代表剪刀; 2代表布;
        printf("亲,0代表石头; 1代表剪刀; 2代表布;输入666退出游戏! ");
        
        //1.2设定循环让玩家可以一直玩
        while (1) {
            
            //2.0监测用户输入值的合法性
            int player = -1;
            
            while (player < 0 || player > 2) {
                //2.1如果用户输入666,则退出游戏
                if (player == 666) {
                    return 0;
                }
                printf("请输入0~2中的一个数: ");
                scanf("%d", &player);
            }
            
            //3.利用电脑产生一个0~2的随机数
            int computer = arc4random_uniform(3);
            
            //4.定义一个变量储存两者之差
            int num = player - computer;
            
            //5.1如果player == computer,则平局
            if (num == 0) {
                printf("平局! ");
            }
            //5.2如果差是-1或者是2,玩家赢
            else if (num == -1 || num == 2){
                printf("我靠,你赢了! ");
            }
            //5.3否则电脑赢
            else{
                printf("很遗憾,你输了! ");
            }
            printf("player = %i, computer = %i ", player, computer);
           
        }
        
        return 0;
    }

    10.运算符的优先级

  • 相关阅读:
    HTML meta viewport属性说明(mark)
    利用css样式画各种图形初步、进阶、高级(一)
    sql where 1=1和 0=1 的作用
    java日志文件log4j.properties配置详解
    VB面向对象编程
    怎么上传代码?
    Spring中部署Activiti流程定义的三种姿势
    不会使用Spring的配置文件,赶紧把这个甩给他
    一起玩转玩转LiteOS组件:Opus
    带你读AI论文丨RAID2020 Cyber Threat Intelligence Modeling GCN
  • 原文地址:https://www.cnblogs.com/wm-0818/p/5059399.html
Copyright © 2011-2022 走看看