linux学习——day03(部分day04)

运算符

逻辑运算符

&&   逻辑与

||      逻辑或

!     逻辑非

#include<stdio.h>
int main ()
{
    printf("%d\n",2>3); //2>3为假返回0,反之为1
    printf("%d\n",2>3&&3>2); //0&&1 -> 0; 0&&0 ->0; 1&&1 ->1
                             //&&逻辑与:全真则真,一假则假
    printf("%d\n",2>3||3>2); //0||1 -> 1; 0||0 ->0; 1||1 ->1
                             //||逻辑或:一真则真,全假则假
    printf("%d\n",!(2>3)); // !(2>3)返回1!    逻辑非:非真则假,非假则真  



    //截断法则:
    //逻辑与运算中,前边的表达式结果为假,后边的表达式不再执行,直接返回假
    //逻辑或运算中,前边的表达式结果为真,后边的表达式不再执行,直接返回真
    int a=5,b=6,c=7,d=8,m=2,n=2;
	(m=a>b)&&(n=c>d);
	printf("%d  %d\n",m,n);// m=0 n=2
   
    

    //0为假,非0为真
    printf("%d\n",10&&-10);//返回1
    return 0;
}

位运算符

对二进制数进行运算

& | ^ ~ << >>

&1100

|1100

^异或相同0不同1

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

对于正数

#include<stdio.h>
int main()
{
    int a=12,b=10;
    int c=a&b;
    int d=a|b;
    int e=a^b;
    //12----1100
    //10----1010
    //&     1000
    //|     1110    
    //^     0110   对二进制数对应位的数进行运算
    printf("%d\n",c);//c=8
    printf("%d\n",d);//d=14
    printf("%d\n",e);//e=6


}

对调两个变量的值

#include<stdio.h>
int main()
{
    
    int a=12,b=10;
    //int c;
    //c=a;a=b;b=c;

    a=a^b;
    b=a^b;
    a=a^b;
    return 0;
}

对于负数

计算机整数二进制补码形式存储计算

原码反码补码

原码

反码

补码

正数

相同

相同

相同

负数

相同

符号位其他取反

反码+1

int 类型大小为:4字节=32位 

符号位最左边 0正数 1负数

12的原码:

0000 0000 0000 0000 0000 0000 0000 1100

-12的原码:

1000 0000 0000 0000 0000 0000 0000 1100

#include<stdio.h>
int main()
{
    int a=12,b=-10;
    int c=a&b;
    int d=a|b;
    int e=a^b;
    // 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补码:  0000 0000 0000 0000 0000 0000 0000 1100 
    // -10补码: 1111 1111 1111 1111 1111 1111 1111 0110

    //&        0000 0000 0000 0000 0000 0000 0000 0100

    //|    补码1111 1111 1111 1111 1111 1111 1111 1110
    //     反码1111 1111 1111 1111 1111 1111 1111 1101
    //     原码1000 0000 0000 0000 0000 0000 0000 0010      
    
    //^    补码1111 1111 1111 1111 1111 1111 1111 1010
    //     反码1111 1111 1111 1111 1111 1111 1111 1001
    //     原码1000 0000 0000 0000 0000 0000 0000 0110
    printf("%d\n",c);//c=4
    printf("%d\n",d);//d=-2
    printf("%d\n",e);//e=-6
    

    return 0;
}

~取反

#include <stdio.h>
int main(){
int a=7;

int c=~a;
对7进行取反运算

/*7补码:

0000 0000 0000 0000 0000 0000 0000 0111

补码取反:

1111 1111 1111 1111 1111 1111 1111 1000 

转换为反码:

1111 1111 1111 1111 1111 1111 1111 0111

取反得到原码:

1000 0000 0000 0000 0000 0000 0000 1000*/

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

<<左移

对数的原码进行操作

如:6左移2位

        6的原码  0000 0000 0000 0000 0000 0000 0000 0110

        左移2位  0000 0000 0000 0000 0000 0000 0001 1000

        结果为24

        超出34位范围的值忽略

#include <stdio.h>
int main(){

printf("%d\n",6<<2);//24
printf("%d\n",-6<<2);//-24
return 0;
}

6<<2==24

公式计算

6左移两位

6*2^2=24

-6左移两位

-6*2^2=-24

>>右移

对数的原码进行操作

如:6右移2位

        6的原码  0000 0000 0000 0000 0000 0000 0000 0110

        右移2位  0000 0000 0000 0000 0000 0000 0000 0001

        结果为2

        超出34位范围的值忽略

#include <stdio.h>
int main(){

printf("%d\n",6>>2);//1
printf("%d\n",-6>>2);//-2
return 0;
}

6>>2==1

公式

6/2^2=1

-6/2^2=-2

结果若不为整数,向下取整.

将 第n位 置一

a|(1<<n)

将第n位置零

a&(~(1<<n))

#include <stdio.h>
int main(){
//将 第n-1位 置一
printf("%d\n",9|(1<<2));//13    1011
//将第n位置一
printf("%d\n",9&(~(1<<3)));//1  0001   
return 0;
}

关系运算符

> >= < <= == !=

==等于 =赋值

数据范围表示: x>2&&x<9

                           2<x<9 不可用

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

运算中有三个变量

? :

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

#include<stdio.h>
int main(int argc,char const*argv[]){
    int a=5,b=9;    
    int c=a>b?a:b;
    printf("%d\n",c);//9
    return 0;
}

单目运算符运算中有三个变量  如: ~    ++   --    !    

赋值运算符

= += -= *= /= %=

a-=5    相当于  a=a-5

运算符优先级

口诀:单 异或

运算顺序:

单目运算符 ~ ++ -- !

算术运算符 * / % + -

移位运算符 << >>

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

运算符 &

异或运算符 ^

运算符 |

逻辑运算符 && ||

条件运算符 ?:

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

标点符号

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

分隔符

空格 tab \n

变量

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

数据定义格式

存储类型 数据类型 变量名

 auto        int           a;

存储类型决定变量存储位置(不写默认auto)

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

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

名字

字节大小  

取值范围

int

整型

4

char

字符型

1

-2^7——2^7-1

short

短整型

2

long

长整型

8

float

单精度浮点型

4

double

双精度浮点型

8

sizeof() 返回数据括号中类型大小 

                  该函数返回数值类型为长整型  long   (%ld)

printf(“%ld\n”,sizeof());

有效位数

float   6-7

double  15-16

#include <stdio.h>
int main()
{    
    float a=1234.567891;
    double b=1234.567891;
    printf("%f\n",a);//1234.567871
    printf("%lf\n",b);//1234.567891
    return 0;
}

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

局部变量

全局变量

定义位置

函数体内部

函数体外部

初值

初始化值不定

初始化值为0

存储位置

栈区

全局区

生命周期

所在函数结束 变量结束

程序结束 变量结束

作用域

所在函数中

整个程序

作用域的特殊情况:

全局与局部有相同变量(就近原则)

#include <stdio.h>
int a=10;
int main()
{
    int a=8;
    printf("%d\n",a);//8
    return 0;

}
#include <stdio.h>
int a=10;
int main()
{
    int a=8;
    fun();//10
    printf("%d\n",a);//8
    return 0;

}

void fun()
{
    printf("%d\n",a);

}

常量

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

整型常量

八进制 十进制 十六进制

字符常量

字符      用' '包裹,一对单引号仅能包裹一个字符

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

浮点常量

float double

标识常量

宏定义

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

宏名:一般使用大写字母表示,方便与一般变量区分

注意原样替换计算

#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 若先计算结果为15
    return 0; 
}
#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

    a=69;
    b=522;
     printf("%d\n",NUM);//522
    return 0; 
}

宏函数

#include<stdio.h>
#define NUM(a,b) a>b?a:b 

int main(int argc,char const *argv[])
{

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


    printf("%d\n",NUM(52,95));//95

    return 0; 
}

作业

a= a/(k+m*k+m/k+m*k+m)=10/(2+1*2+1/2+1*2+1)=1        (整型计算  1/2=0   10/7=1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值