C:条件判断

1. if-else 判断


if(expression)
Statement1
else
Statement2

if 括号中为 true , 执行 Statement1;如果为false, 执行 Statement2;
多个指令,可以放在{}中,替换 Statement1

1.1 关系运算


  • < 小于
  • > 大于
  • == 等于
  • <= 小于等于
  • >= 大于等于
  • != 不等于

1.2 逻辑运算符


  • && 逻辑与
  • || 逻辑或
  • ! 逻辑非

1.3 条件运算符


condition ? expression1 : expression2
condition为 true, 执行 expression1, 否则,执行expression2

1.4 运算符优先级


算术运算  >  比较运算 > 逻辑运算。



优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[常量表达式]

左到右

--

()

圆括号

(表达式)/函数名(形参表)

--

.

成员选择(对象)

对象.成员名

--

->

成员选择(指针)

对象指针->成员名

--

 

2

-

负号运算符

-表达式

右到左

单目运算符

~

按位取反运算符

~表达式

++

自增运算符

++变量名/变量名++

--

自减运算符

--变量名/变量名--

*

取值运算符

*指针变量

&

取地址运算符

&变量名

!

逻辑非运算符

!表达式

(类型)

强制类型转换

(数据类型)表达式

--

sizeof

长度运算符

sizeof(表达式)

--

 

3

/

表达式/表达式

左到右

双目运算符

*

表达式*表达式

%

余数(取模)

整型表达式%整型表达式

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

5

<< 

左移

变量<<表达式

左到右

双目运算符

>> 

右移

变量>>表达式

 

6

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

小于

表达式<表达式

<=

小于等于

表达式<=表达式

7

==

等于

表达式==表达式

左到右

双目运算符

=

不等于

表达式!= 表达式

 

8

&

按位与

表达式&表达式

左到右

双目运算符

9

^

按位异或

表达式^表达式

左到右

双目运算符

10

|

按位或

表达式|表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

 

13

?:

条件运算符

表达式1?

表达式2: 表达式3

右到左

三目运算符

 

14

=

赋值运算符

变量=表达式

右到左

--

/=

除后赋值

变量/=表达式

--

*=

乘后赋值

变量*=表达式

--

%=

取模后赋值

变量%=表达式

--

+=

加后赋值

变量+=表达式

--

-=

减后赋值

变量-=表达式

--

<<=

左移后赋值

变量<<=表达式

--

>>=

右移后赋值

变量>>=表达式

--

&=

按位与后赋值

变量&=表达式

--

^=

按位异或后赋值

变量^=表达式

--

|=

按位或后赋值

变量|=表达式

--

 

15

逗号运算符

表达式,表达式,…

左到右

--



一些容易出错的情况



2. 多项选择


2.1 else - if 


is(choice)
state1
else if (choice 2)
state2
else
default
每个 if 判断真假 ,true执行

2.2 switch 语句


switch(ticket_num)
{
	case 35:
		printf("Congratulations!");
		break;
	case 122:
		printf("You are luck");
		break;
	default:	
		printf("Too bad");
}


break; 跳过括号中的其他语句。
如果省略了某个case 后面的 break, 就继续执行下一个case语句。

2.3 goto语句

goto语句会直接跳到指定的位置, 无须检查任何值。

goto there;
statiment1

there: x=10;
目标语句必须和goto语句有相同的标签。 上面例子的标签就是 there。

3. 按位运算符


位运算符操作整数中的位, 共6个。
运算符含义描述
&按位与如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
|按位或两个相应的二进制位中只要有一个为1,该位的结果值为1
^按位异或若参加运算的两个二进制位值相同则为0,否则为1
~取反~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
<< 左移 用来将一个数的各二进制位全部左移N位,右补0
>> 右移 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0
这些运算符只能用于整数,
~运算符是一元运算符,只处理一个操作数, 其他都是二元运算符

3.1 按位与

int x = 13;
int y = 6;
int z = x & y;

x :  0 0 0 0 1 1 0 1
y :  0 0 0 0 0 1 1 0
z :  0 0 0 0 0 1 0 0 
取 与 操作, 所以z为 4, 二进制 100;

3.2 按位或

int z = x | y;
x :  0 0 0 0 1 1 0 1
y :  0 0 0 0 0 1 1 0
z :  0 0 0 0 1 1 1 1 
取 或 操作, 所以z为 15, 二进制 1111;

3.3 按位异或

int z = x^y;
x :  0 0 0 0 1 1 0 1
y :  0 0 0 0 0 1 1 0
z :  0 0 0 0 1 0 1 1 
取 异或 操作, 所以z为 11, 二进制 1011;

3.4 按位 非

int z = ~x;
x :  0 0 0 0 1 1 0 1
z :  1 1 1 1 0 0 1 0    (负整数为补码存储,补码求反码, 减一)
1:0 0 0 0 0 0 0 1
=:1 1 1 1 0 0 0 1(反码求原码:符号位不变,其余取反)
      1 0 0 0 1 1 1 0 
取 非 操作, z最终值:1 0 0 0 1 1 1 0 (-14)

3.5 按位左移

int value = 12;
int shiftvalue = 3;
int result = value<<shiftvalue;
value : 0 0 0 0  1 1 0 0 
result : 0 1 1 0  0 0 0 0 
result 左移3位,  为 96

3.6 按位右移

unsinged int value = 65372U;
unsigned int result = value >> 2;
value ; 1 1 1 1 1 1 1 1   0 1 0 1 1 1 0 0 
>>2   :  0 0 1 1 1 1 1 1  1 1 0 1  0 1 1 1
带符号的负值, 最左是1, 移位取决于系统,大多数请求,右移补入的是1
int new_value = -164;
1000 0000 1010 0100   (-164)
1111 1111 0101 1011    (反码)
1111 1111 0101 1111     (补码)
1111 1111 1101 0111      (右移2位,结果为反码)
1111 1111 1101 0110     (反码)
1000 0000 0010 1001      (原码)
结果为 -41

3.7 op= 用法

除~ 外, 所有二元按位用算都可以用 op= 形式使用,
value <<= 4;  等价于  value  = value << 4;
value &= 0xFF;  等价于  value = value & 0xFF;

3.8 按位运算符的用法

主要用于测试并设置整数变量中的各个位。
按位存储 运算速度快, 减少存储空间。
可以按位存储用户的状态信息
int male = 1;
int french = 2;
int genman = 4;
int english = 8;
第一位 1为男, 0为女
第二位  1 会说法语, 0不会法语
。。。
变量 int  user_data 表示用户数据,
判断用户是否会说法语
if(user_data & french){
    // can speak french
}
修改用户信息
设置为会说法语和英语
user_data |= french | english
重置用户为女性
user_data &= !male;
!male表示男性位置设置为0,


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值