虚拟机day3课堂笔记及作业

day03

[1]运算符

1.1 逻辑运算符

&&逻辑与全真则真

||逻辑或

!逻辑非

0为假    1为真

#include <stdio.h>
int main(int argc, char *argv[])
   {
        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
        return 0;
   }

0 0

#include <stdio.h>
int main(int argc, char *argv[])
   {
        printf("%d\n",99&&0);      //0
        printf("%d\n",81&&10);    //1
        printf("%d\n",0&&10);     //0
        return 0;
   }

截断法则

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

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

练习

#include <stdio.h>

int main()

{

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

(m=a>b)&&(n=c>d);  //利用截断法则,逻辑与运算中,前面为假,则不执行后面的,直接返回假

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

}

答案:n=2

1.2 运算符

二进制 0   1

&     |      ^       ~       <<      >>

&1100

|1100

^异或相同0不同1

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

示例:

#include <stdio.h>
int main(int argc, char *argv[])
{
    int a=12,b=10;
    //12: 1100
    //10: 1010
    printf("%d\n",a|b);     //14          有1则1,全0则0
    printf("%d\n",a&b);   //8            全1则1,有0则0
    printf("%d\n",a^b);    //6           相同为0,不同为1
    printf("%d\n",~b );    //-11
    printf("%d\n",~a );    //-13
    return 0;
}

    int a=100,b=60;
    printf("%d\n",~b );   //-61
    printf("%d\n",~a );   //-101

首位取反再加1

练习

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

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

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

实现两个变量交换

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

符号位最左边 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;    //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

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

int a=7;

int c=~a;

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

首位取反再加1

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

解析:

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

110010

000100       1<<2

110110

110100 &   111011  =  110000

111011

110000

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

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

练习

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

int main()

{

char x=040; //1 000 000 ==0100

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

return 0;

}

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

答案:B

答案:52

1.3 关系运算符

>     >   <     <=     ==    !=

==等于 =赋值

2--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

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

答案:a.00011011 

解析:a:        00011
          b<<2:  11000
          c:        11011

答案:3       解析:  !z=0,y>!z=1,x+y=3

标点符号

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

分隔符

空格   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

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

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

有效位示例:

#include <stdio.h>
int main(int argc, char const  * argv[])
{
    float a=123456789.567891;
    double b=123456789123456778.567891;
    printf("%f\n",a);
    printf("%lf\n",b);
}

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

局部变量

全局变量

定义位置

函数体内部

函数体外部

初值

初始化随机值

初始化0

存储位置

栈区

全局区

生命周期

当前函数体共存亡

整个程序共存亡

作用域

当前函数体内部

整个程序

[3]常量

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

3.1 整型常量

八进制 十进制 十六进制

3.2 字符常量

字符 ' '包裹一个字符

字符串 由" "包裹,由'\0'作为字符串的结束标志    例:“hello\0”    \0隐藏

字符数组----》

3.3 浮点常量

float double

3.4 标识常量

宏定义

格式#define 宏名 常量表达式代码段      例:#define N 3

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

注意原样替换计算

#include <stdio.h>
#define N 2
#define M N+2
#define NUM 2+M*3+1    //2+2+2*3+1
int main(int argc, char const  * argv[])
{
    printf("%d\n",NUM);   //11
}

#include <stdio.h>
#define NUM a>b?a:b
int main(int argc, char const  * argv[])
{
    int a=6,b=8;
    printf("%d\n",NUM);   //8
}

宏函数了解

#include <stdio.h>
#define NUM(a,b) a>b?a:b
int main(int argc, char const  * argv[])
{
    printf("%d\n",NUM(88,999));   //999
}

作业

1.  梳理笔记(原创) 明天继续提问

2.      答案:1   

解析:

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

a=10/7=1

答案:C    解析:    k=5+5*5+5*5=55

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值