day03

[1]运算符

1.1 逻辑运算符

&&逻辑与:全真则真,一假则假

||逻辑或:一真则真,全假则假

!逻辑非:非真则假,非假则真

0为假 1为真

printf("%d\n",2>3); //0

printf("%d\n",22>3);//1

printf("%d\n",12>3&&8<6); //0

printf("%d\n",12>3||8<6); //1

printf("%d\n",12>3 && !(8<6)); //1

printf("%d\n",!1);//0

0为假 非0值为真

printf("%d\n",81&&10); //1

截断法则

逻辑与运算&&中,前边的表达式结果为假,后边的表达式不再执行,直接返回假

(&&有假后面不执行)

逻辑或运算||中,前边的表达式结果为真,后边的表达式不再执行,直接返回真

(||有真后面不执行)

练习:

#include <stdio.h>

int main()

{

int a=5,b=6,c=7,d=8,m=2,n=2;

(m=a>b)&&(n=c>d);

//5>6,所以m=0,(根据截断法则)在&&中因为m=0,所以n不变,n=2

printf("%d %d",m,n); //0 2

}

n=2

1.2 位运算符

二进制数 0 1

& | ^ ~ << >>

&位与:全1则1,有0则0

|位或:有1则1,全0则0

^异或:相同为0,不同为1

~取反:1---->0 0------>1

练习:

D变量x和y的值相等,且为非零值,则以下选项中,结果为0的表达式是()

A.x||y B.x|y C.x&y D.x^y

实现两个变量值的交换:

int a=12,b=10;

1)

int temp=0;

temp=a;

a=b;

b=temp;

printf("%d %d\n",a,b);

2)

a=a^b;//0110==6

b=a^b;//0110 1010 1100=12

a=a^b;//0110 1100 1010=10

printf("%d %d\n",a,b);

计算机中,整数以二进制的补码形式存储,计算的

原码、反码、补码

原码

反码

补码

正数

相同

相同

相同

负数

相同

除符号位外,其他按位取反

反码+1

int 4字节=32位 1字节=8位

12:

0000 0000 0000 0000 0000 0000 0000 1100

-12:

1000 0000 0000 0000 0000 0000 0000 1100

int a=12,b=-10; //12:1100 10:1010

int c=a&b;

printf("%d\n",c); //4

12补码:

0000 0000 0000 0000 0000 0000 0000 1100

-10原码:

1000 0000 0000 0000 0000 0000 0000 1010

-10反码:

1111 1111 1111 1111 1111 1111 1111 0101

-10补码:

1111 1111 1111 1111 1111 1111 1111 0110

12补码 & -10补码:

0000 0000 0000 0000 0000 0000 0000 1100

1111 1111 1111 1111 1111 1111 1111 0110

0000 0000 0000 0000 0000 0000 0000 0100===4

数值运算

先转换成32位二进制,在转换成补码(正数不变,负数则二进制取反加1)

进行运算

~取反:1--》0 0-->1

int a=7;

int c=~a;

printf("%d\n",c);//-8

===========================

7补码:

0000 0000 0000 0000 0000 0000 0000 0111

~: 补码

1111 1111 1111 1111 1111 1111 1111 1000 1000=8 0111

反码:

1111 1111 1111 1111 1111 1111 1111 0111

原码:

1000 0000 0000 0000 0000 0000 0000 1000===-8

<<左移

左移n位,右边补充n个0

6<<2==24

公式:

6*2^2=24

-6*2^2=-24

>>右移

右移n位,最右边舍弃n位

6>>2==1

公式:

6/2^2=1

-6/2^2=-2

练习:

练习:

以下程序升输出结果是()。

int main()

{

char x=040;

printf("%o\n",x<<1);

return 0;

}

A.100 B.80 C.64 D.32

A、

解析:

X=040,因为x<<1所以X=040*2^1=080,

因为八进制最高是7,所以8要进一位,x=100.

B、

解析:

X--&++y表示1&0,根据&位与:全1则1,有0则0,所以输出为0

52

解析:

13*2^2=52

1.3 关系运算符

> >= < <= == !=

==等于 =赋值

  1. -9        x>2&&x<9

1.4 三目运算符 (选择运算符)

? :

表达式1?表达式2:表达式3;

int a=5,b=9;

int c=a>b?a:b;

printf("%d\n",c); //9

1.5 赋值运算符

=   +=   -=   *=   /=   %=

a-=5; // a=a-5;

1.6 运算符优先级

单算移关与 异或逻条赋

单目运算符: ~   ++   --   !

算术运算符: * / % + -

移位运算符: << >>

关系运算符: > >= < <= == !=

位与运算符: &

异或运算符: ^

位或运算符: |

逻辑运算符: && ||

条件运算符: ?:

赋值运算符: = += -= *= /= %=

练习:

设int b=2;表达式 (b>>2)/(b>>1)的值是()

A.0   B.2   C.4   D.8

A

解析:

(2*2^-2)/(2*2^-1)=0/1=0

A

解析:

(^异或:相同为0,不同为1)

a=00011;

b=00110;

b<<2 =11000;

a^b<<2=11011;

所以c的二进制为00011011

3

解析:

!z=0

y>!z=1

x+(y>!z)=2+1=3

标点符号

英文 , ; [ ] {} () ....

分隔符

空格 tab \n

[2]变量

程序运行过程中会发生变化

格式:

存储类型 数据类型 变量名

int a;

存储类型:决定变量存储位置

数据类型:决定变量开辟空间大小

变量名:遵循标识符命名规则

名字

字节大小

取值范围(了解)

int

整型

4

-2^31 到 2^31-1

char

字符型

1

-2^7 到 2^7-1

short

短整型

2

-2^15 到 2^15-1

long

长整型

8

-2^63 到 2^63-1

float

单精度浮点型

4

-3.4E38至+3.4E38

double

双精度浮点型

8

±1.7E-308至±1.7E+308

float                 实际有效位置为小数点后6-7位

double             实际有效位置为小数点后15-16

printf("%ld\n",sizeof(long));

局部变量和全局变量的区别

局部变量

全局变量

定义位置

函数体内部

函数体外部

初值

未初始化,值是随机值

未初始化,值是0

存储位置

栈区

全局区静态区

生命周期

同当前函数体共存亡

同整个程序共存亡

作用域

当前函数体内部

整个程序

[3]常量

程序运行过程中不会发生变化

3.1 整型常量

八进制 十进制 十六进制

3.2 字符常量

字符 由' '包裹一个字符

字符串 由" "包裹,由'\0'作为字符串的结束标志

字符数组----》

3.3 浮点型常量

float double

3.4 标识常量

宏定义:

格式:#define 宏名 常量值或表达式或代码段

宏名:一般用大写表示,为了和普通变量区分开

注意:先原样替换,再计算。

宏函数,了解

作业:

1

解析:

a/=2+1*2+1/2+1*2+1

=2+2+0+2+1

=7

a=10/7

=1

  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值