您的位置:首页 > 其它

Day 03

2015-12-19 16:58 225 查看

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退出游戏!\n");

//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中的一个数:\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");
}
printf("player = %i, computer = %i\n", player, computer);

}

return 0;
}


10.运算符的优先级



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: