linux 学习day3

[1]运算符

  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);

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

}

int a=1,b=2,c=3,d=4,m=2,n=2;

1.2 位运算符

& | ^ ~ << >>

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

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

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

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

<<左移:左移n位,右边补充n0  //101<<2=10100

>>右移:右移n位,最右边舍弃n位//101>>2=1

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

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

例子:置一                                置零

将a的第4位置零置一                 将a的第5位置零置零

a=110010                                  a=110010

1<<3将1左移3位->1000            1<<3将1左移3位->1000                      

110010|1000=111010                 ~1000=0111

                                                  110010&0111=             

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

原码、反码、补码

原码

反码

补码

正数

相同

相同

相同

负数

相同

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

反码+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

反码

12: 0000 0000 0000 0000 0000 0000 0000 1100

-12:1111 1111 1111 1111 1111 1111 1111 0011

补码

12: 0000 0000 0000 0000 0000 0000 0000 1100

-12:1111 1111 1111 1111 1111 1111 1111 0100

12&-12=0000 0000 0000 0000 0000 0000 0000 0100=4

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

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

//^异或相同为0

实现a=12,b=10变量值的交换:

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

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

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

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

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

int main()

{

char x=040;                // 040为8进制   040=000 100 000

printf("%o\n",x<<1);      //%o为八进制    左移一位  0 001 000 000  =100

return 0;                                 

}

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

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

//首先执行++y 然后& 最后x++ 

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

//a*2^2

int a=7;

int c=~a;

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

//

7补码:

0000 0000 0000 0000 0000 0000 0000 0111

~7=

1111 1111 1111 1111 1111 1111 1111 1000
~7反码:

1111 1111 1111 1111 1111 1111 1111 0111

~7原码:

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

 1.3 关系运算符

.> >= < <= == !=

1.4三目运算符  ?:

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

例子

int a=5,b=9;

int c=a>b?a:b;

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

 1.5 赋值运算符

  =   +=   -=   *=   /=   %=

a+=b  //a=a+b

1.6 运算符优先级

口诀:单算移 异或

单目运算符 ~ ++ -- !

算术运算符 * / % + -

移位运算符 << >>

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

运算符 &

异或运算符 ^

运算符 |

逻辑运算符 && ||

条件运算符 ?:

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

练习

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

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

设有以下语句,则c的二进制是(00011011)

char a=3,b=6,c;

c=a^b<<2;

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

[2]变量:程序运行过程中会发生变化

格式:存储类型 数据类型 变量名

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

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

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

函数函数名字节大小
int整型4
char字符型1
short短整型2
long长整型8
float单精度浮点型4
double双精度浮点型8
printf("%ld\n",sizeof(long));  //  可以使用 sizeof 函数查看字节大小

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

局部变量

全局变量

定义位置

函数体内部

函数体外部

初值

初始化随机值

初始化0

存储位置

栈区

全局区

生命周期

和函数一起

和程序一起

作用域

当前函数体内部

整个全局

[3]常量:程序运行过程中不会发生变化

3.1 整型常量

八进制 十进制 十六进制

3.2 字符常量

字符------‘   ’  单引号

字符串-----“    ”双引号

3.3浮点常量

float double

3.4 标识常量

宏定义

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

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

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

例子

#define n 1
#define m 3+n
#define b 2+3*m-n

//b 的结果为 2+3*3+n-n

宏函数

全局函数,随时变换

#include<stdio.h>
#define NUM(a,b) a>b?a:b
int main(){
    int a=10,b=20;
    printf("%d\n",NUM(a,b));
    return 0;
}

//最后输出最大值

作业 

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

//输出值为1,当调用宏函数的时候,先原样替换,再计算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值