2024.7.3

[1]运算符

1.1逻辑运算符

&&:逻辑与

||:逻辑或

!:逻辑非

0为假,1为真,不成立为假,成立为真

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

上面代码输出的结果为0

printf("%d\n",4>3);

上面代码输出的结果为1

printf("%d",4>3&&5>6);

&&两边要同时成立才能输出1,所以上面的代码输出0

||只要两边有一个成立就为真

0为假,非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);		//0  2
}
int a=1,b=2,c=3,d=4,m=2,n=2;
执行(m=a>b)&&(n=c>d)后,n=()。

可以使用if语句来判断真假

#include<stdio.h>
int main()
{
    if(10)
    {
        printf("T");
    }
    else
    {
        printf("F");
    }
}
则输出为T

1.2 位运算符

二进制 0 1

& | ^ ~ << >>

&1100

|1100

^异或相同0不同1

~取反1->00 ->1

#include<stdio.h>
int main()
{
    int a=12,b=10;
    int c=a&b;
    //12:1100
    //10:1010
    //a&b:1000
    //a|b:1110
    //a^b:0110
    printf("%d\n",c);//8
    return 0;
}

练习

变量x和y的值相等,且为非零值,则以下选项中,结果为0的表达式是()
A.x||y  	   	B.x|y   	C.x&y   	 D.x^y
解:D
实现 两个 变量 交换
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 符号位在最左边,0指的是正数

-12:

1000 0000 0000 0000 0000 0000 0000 1100 符号位在最左边,1指的是负数

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

#include<stdio.h>
int main()
{
    int a = 7,b=-6;
    int c=a&b;
    printf("%d\n",c);//2
}

//a 0000 0000 0000 0000 0000 0000 0000 0111
//b 1000 0000 0000 0000 0000 0000 0000 0110
//b的反码 1111 1111 1111 1111 1111 1111 1111 1001
//b的补码 1111 1111 1111 1111 1111 1111 1111 1010
//a&b 为a的补码&b的补码 0000 0000 0000 0000 0000 0000 0000 0010 所以为2

~取反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位右边n0

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

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

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

练习

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

int main()

{

        char x=040;

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

        return 0;

}

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

解:A,c语言中%o的意思是以8进制整型式输出整数

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

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

解:B

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

解:1101->110100  为52

1.3 关系运算符

>>=<<===!=
大于大于等于小于小于等于赋值

==等于         =赋值

表示2~9,则x>2&&x<9

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

表达式1表达式2表达式3;

int main()
{
    int a=5,b=9;
    int c=a>b?a:b;
    printf("%d\n",c);//9
    return 0;
}

单目运算符

!(逻辑非) ~(按位取反)++(自增)--(自减)

赋值运算符

=   +=   -=   *=    /=     %=

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

1.6 运算符与优先级

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

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

算数运算符:*    /   %     +    -

移位运算符:<<   >>

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

运算符 &

异或运算符 ^

运算符 |

逻辑运算符 && ||

条件运算符 ?:

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

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

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

解:A

#include<stdio.h>
int main()
{
    
    char a=3,b=6,c,d;
    c=a^b<<2;       //27
    d=a^b;             //5
    printf("%d\n",d);
    printf("%d\n",c);

    return 0;
}

0011 ^ 1010相同为0 不同为1 0110

标点符号

要使用英文符号        ,           ;         [ ]           {}             ()          ....

分隔符

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

-2^31~2^31-1

double

双精度浮点型

8

-2^63~2^63-1

printf("%ld\n",sizeof(long));//可以使用这个显示数据类型的字节大小

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

局部变量

全局变量

定义位置

函数体内部

函数体外部

初值

初始化随机值

初始化0

存储位置

栈区

全局区

生命周期

当前函数体共存亡

整个程序共存亡

作用域

当前函数体内部

整个程序

[3]常量

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

3.1 整型常量

八进制 十进制 十六进制

3.2 字符常量

字符 ' '包裹一个字符

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

字符数组----》

3.3 浮点常量

float double

3.4 标识常量

宏定义

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

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

注意原样替换计算

#include<stdio.h>
#define N 2
#define M N+2
#define NUM 2+M*3+1//2+2+2*3+1
int main()
{
    printf("%d\n",N);
    printf("%d\n",M);
    printf("%d\n",NUM);
}
#include<stdio.h>
#define NUM a>b?a:b
int main()
{
    int a=6;b=8;
    printf("%d\n",NUM);//8
}

#include<stdio.h>
#define NUM(a,b) a>b?a:b
int main()
{
    printf("%d\n",NUM(888,999));//999
}

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

#include<stdio.h>
#define SQR(X) X*X
void main()
{
    int a=10,k=2,m=1;
    a /= SQR(k+m)/SQR(k+m);//a/=k+m*k+m/k+m*k+m
    printf("%d\n",a);//a/=7
}
解:1

#include<stdio.h>
#define M 5
#definr N M+M
main()
{
    int k;
    k=N*N*5;//5+5*5+5*5
    printf("%d\n",k);
}
解:选C

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值