day3 笔记

<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);        //m=a>b为假,m=0  ,后面的n=c>d就不再执行,n=2

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

}

最后输出结果为 m=0 n=2

1.2 位运算符

1.21 原码    反码   补码

原码        反码补码        
正数相同相同相同
负数相同除符号位外,其他按位取反反码+1
计算机中,整数以 二进制的补码 形式存储,计算的
int 形式:占据 4字节 = 32位     1字节 = 8位
符号位 :最左边第一个数     0 正数  1 负数
以12为例: 0000 0000 0000 0000 0000 0000 0000 1100
  -12       : 1000 0000 0000 0000 0000 0000 0000 1100

练习:

int a=12,b= -10; 

int c=a&b;

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

过程:

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

1.2.2 &   |   ^   ~   <<   >>

用二进制数表示 : 0  1

符号: &   |   ^   ~   <<   >>

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

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

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

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

<<左移

>>右移

练习:

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

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

2. a=12 ,b=10,怎么只用位运算符交换数值

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

int a=7;

int c=~a;

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

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

7补码:

0000 0000 0000 0000 0000 0000 0000 0111

~a:

补码

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

结果 : c = -8

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

公式: a<<n==a*2^n

13|(1<<1)

        13: 1101

        1: 001

        1<<1: 0010

结果:1111---15

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

公式: a>>n==a/2^n

置一公式:a|(1<<n)

置零公式:a&(~(1<<n))

练习:

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

int main()

{

        char x=040;  // 040是8进制,转换为2进制为:100 000 ==0100

        printf("%o\n",x<<1);   //左移1位  1 000 000 ,再转换为8进制为 100

        return 0;

}

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

2.已知:int x =1, y=-1;则语句printf("%d\n",(x-- & ++y));输出结果是(B

        A.1        B.0        C.-1        D.2

3.已知 啊=13 ,a<<2 的十进制数值为 (52)

   // 13*2^2=52

1.3 关系运算符

>   >=   <   <=   ==   !=

==等于         =赋值

表示范围2--9 :     x>2&&x<9

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

? :

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

先求解表达式1,

若其值为真(非0)则将表达式2的值作为整个表达式的取值,

否则(表达式1的值为0)将表达式3的值作为整个表达式的取值。

例如:

1、max=(a>b)?a:b

就是将a和b二者中较大的一个赋给max。

2、min=(a<b)?a:b

就是将a和b二者中较小的一个赋给min。

        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 运算符优先级

口诀: 单算移关与  异或逻条赋

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

        算术运算符:         *  /  %  +  -

        移位运算符:         << >>

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

        位与运算符:         &

        异或运算符:         ^

        位或运算符:         |

        逻辑运算符:         &&  ||

        条件运算符:         ?  :

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

练习:

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

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

2.设有以下语句,则c的二进制值是 (A

        char a=3,b=6,c;        //  <<优先级比 ^高,先计算b<<2,再算a^b

        c=a^b<<2;                //  b:110   <<2:11000  a:00011

    A.00011011        B.00010100        C.00011100        D.00011000

3.int x=2,y=3,z=4;则表达式x+(y>!z)的值为(3

1.7 标点符号

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

1.8 分隔符

空格  tab  \n

<2> 变量

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

格式:

存储类型         数据类型         变量名

                             int                 a;

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

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

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

名字字节大小取值范围(了解就行)
int

整形

4
char字符型1-2^7 ~ 2^7-1
short短整型2
long长整型8
float单精度浮点型4实际有效位数:6~7位
double双精度浮点型8

实际有效位数:15~16位

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

局部变量

全局变量

定义位置

函数体内部

函数体外部

初值

未初始化,值是随机值

未初始化,值是0

存储位置

栈区

全局区

生命周期

同当前函数体共存亡

同整个程序共存亡

作用域

当前函数体内部

整个程序

<3>常量

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

3.1 整型常量

八进制 十进制 十六进制

3.2 字符常量

字符 由' '包裹一个字符

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

字符数组----》

3.3 浮点型常量

float          double

3.4 标识常量

宏定义:

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

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

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

作业:

1.程序运行后的输出结果是 ( 1

// a /= k+m * k+m / k+m * k+m = 2+1*2+1/2+1*2+1= 2+2+1*2+1=7

// a=10/7=1

2. 结果是(C

// k=N*N*5=5+5*5+5*5= 55
  • 29
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值