Day 03

1.算术运算的注意点

  • 强制类型转换

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

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.提示用户 0代表石头; 1代表剪刀; 2代表布;
    printf("亲,0代表石头; 1代表剪刀; 2代表布;\n");

    //设定循环让玩家可以一直玩
    while (1) {

        //2.监测用户输入值的合法性
        int player = -1;

        while (player < 0 || player > 2) {

            printf("请输入0~2中的一个数:\n");
            scanf("%d", &player);
        }
        //3.利用电脑产生一个0~2的随机数
        int computer = arc4random_uniform(3);

        //4.定义一个变量储存两者之差
        int num = player - computer;

        //5.1如果player == computer,则平局
        if (num == 0) {
            printf("平局!\n");
        }
        //5.2如果差是-1或者是2,玩家赢
        else if (num == -1 || num == 2){
            printf("我靠,你赢了!\n");
        }
        //5.3否则电脑赢
        else{
            printf("很遗憾,你输了!\n");
        }
        //玩一次后跳出循环,玩下一把
        continue;
    }

    return 0;
}

10.运算符的优先级

时间: 2024-10-06 08:58:14

Day 03的相关文章

03 php 数据类型:整数,进制转换,浮点,字符,布尔,数组,空类型,类型转换,算术运算,比较运算

03 数据类型:整数,进制转换,浮点,字符,布尔,数组,空类型,类型转换, 算术运算,比较运算,逻辑运算,短路现象, 三目运算符,字符型运算: 数据类型 整体划分 标量类型: int, float, string, bool 复合类型: array,     object 特殊类型: null,     resouce 整数类型int, integer 3种整数表示法 十进制写法:123: $n1 = 123; 八进制写法: 0123 $n2 = 0123; 十六进制写法: 0x123 $n3

前端开发神器WebStorm--Grunt 搭建环境(03)

通过上一篇前端开发神器WebStorm--自动化工作流(前言),相信大家都Grunt自动化工具有了初步了解. 接下来我就以WROC3000 web为原型,演示一下如何使用Grunt工具提高工作效率,最大程度压缩代码. 1.首先安装node环境 进入官网 下载安装.(记住安装目录) 检测安装成功方法:打开CMD窗口,输入 node --version 会打印出安装的版本号,说明已经安装成功. 2.安装 Grunt 客户端 在CMD 窗口中,切换到node安装盘符,会自动切换到nodejs安装目录.

MyBatis笔记03

1.动态sql 01.if:单独使用if,后面必须有where 1=1 代码:<!-- 需要注意的事项:01. 在xml文件中 特殊字符的使用 &&必须换成 and或者 & < < > > <= <= >= >= ' &apos;" " 02.因为不确定用户输入的到底是哪个参数 所以 where 之后必须加上 1=1 而且 每个条件之前加上 and --> <select id="

Environmental.Science.Limited.ChemHELP.v2.03

Environmental.Science.Limited.ChemHELP.v2.03 VMGSIM.V9.0.46最新版流程模拟软件     chemhelp易于安装和设置(系统要求如下).在一台电脑上,化学制品可以从数据库中选择,输入他 们的全名,或者使用一个搜索,可以指定一个部分的化学名称,中国科学院或联合国的数字,欧共体或欧 共体指数,甚至是一个风险短语.可以为选定的化学物显示的数据包括索引编号.危险符号.芯片分类和 标签.风险短语.物理性质.同义词.以及更多.正如这表明,在数据库中的

UML大战需求分析——阅读笔记03

读<UML大战需求分析>有感03 状态机图和活动图在样子比较相似,但状态机图是用来为对象的状态及造成状态改变的事件建模.我们大二学习UML统一建模语言状态机图模块时了解到,UML的状态机图主要用于建立对象类或对象的动态行为模型,描述系统中某一个对象所经历的各个状态.引起状态或活动转移的事件,以及因状态或活动转移而伴随的动作.但在以前的学习过程中,我们并没有学到过"伪状态",后经查阅知:伪状态是指在一个状态机中具有状态的形式,同时具有特殊行为的顶点.它是一个瞬时状态,用于构造

条款03:尽可能使用const

01.顶层const和底层const char greeting[] = "Hello"; char* p = ; const char* p = greeting;   //const data,nonconst pointer char* const p = greeting;       //nonconst data,const pointer const char* const p = greeting; //const data,nonconst pointer.*的左右位

最新Burpsuite Pro v1.7.03 介绍和破解版下载

0x00 介绍 Burp Suite 是用于攻击web 应用程序的集成平台.它包含了许多工具,并为这些工具设计了许多接口,以促进加快攻击应用程序的过程.所有的工具都共享一个能处理并显示HTTP 消息,持久性,认证,代理,日志,警报的一个强大的可扩展的框架. 0x01 特点: 1 2 3 4 5 6 7 8 9 10 11 1.Target(目标)——显示目标目录结构的的一个功能 2.Proxy(代理)——拦截HTTP/S的代理服务器,作为一个在浏览器和目标应用程序之间的中间人,允许你拦截,查看,

异步编程系列第03章 自己写异步代码

p { display: block; margin: 3px 0 0 0; } --> 写在前面 在学异步,有位园友推荐了<async in C#5.0>,没找到中文版,恰巧也想提高下英文,用我拙劣的英文翻译一些重要的部分,纯属娱乐,简单分享,保持学习,谨记谦虚. 如果你觉得这件事儿没意义翻译的又差,尽情的踩吧.如果你觉得值得鼓励,感谢留下你的赞,愿爱技术的园友们在今后每一次应该猛烈突破的时候,不选择知难而退.在每一次应该独立思考的时候,不选择随波逐流,应该全力以赴的时候,不选择尽力而

uboot.2016.03 在mini2440上norfalsh启动

本人有点懒惰,直接在smdk2410的基础上进行修改 (note :红色字体表示修改内容,蓝色字体表示增加内容) 1. 顶层的makefile 在247行 添加如下两条语句 :   ARCH :=arm     CROSS_COMPILE :=arm-linux- 2 修改始终频率 打开 u-boot-2016.03/arch/arm/cpu/arm920t/start.S 第77行 #if defined(CONFIG_S3C2410) #if defined(CONFIG_S3C2440)

穷举迭代03/10

穷举迭代03/10 for循环拥有两类: 1.穷举: 把所有可能的情况都走一遍,使用if条件筛选出来满足条件的情况. for循环拥有两类: 2.穷举: 把所有可能的情况都走一遍,使用if条件筛选出来满足条件的情况. for循环  for(int i = 1; i<=5;i++) { 循环体: } while样式      int i= 1: while(表达式(i<=5)) { 循环体: 状态改变(i++): } do while 样式    do { 循环体: 状态改变(i++); }whi