LinuxC 7.3 Day3

 

[1]运算符

        1.1 逻辑运算符

 

        &&逻辑与:全真则真,一假则假

        ||逻辑或:一真则真,全假则假

        !逻辑非:非真则假,非假则真

        例如:1>2&&2>1

                    一真一假,因此为假,输出0;

                    2>1&&3>2

                     都为真,因此为真,输出1.

                     3>4||3>2

                      有一个真,则为真,输出1

                      !0      为真,输出1

                      !23    非零都为真,因此逻辑非为假,输出0。

        截断法则:在逻辑与运算,前后表达式中若前面的表达式输出为假,则直接输出假,后面的   表 达式直接不执行。

        逻辑或运算中,前后表达式中若前面的表达式输出为真,则直接输出真,后面的表达式直接不执行。

 

例如:

int a=5,b=6,c=7,d=8,m=2,n=2;
	(m=a>b)&&(n=c>d);

                这里由于&&只要有一个为假则输出假,而a>b不成立,因此后方的表达式不执行,n的值为2不变。

 

1.2 运算符

        

 

二进制数 0 1

& | ^ ~ << >>

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

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

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

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

 

5502e9d3d84945b5a985031aa21e97de.png

在计算时,要将数字转化为二进制,再根据位运算符进行比较输出。

 

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

原码、反码、补码

 

原码

反码

补码

正数

相同

相同

相同

负数

相同

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

反码+1

由表格可得知,当数字为正时,原码、反码、补码都相同,因此当两个正数进行位逻辑运算时只需要使用其原码。当其中有负数时则要使用负数的补码进行计算。其中最左边一位为符号位,0为正,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

<< :左移符号,用于二进制

        x<<n

        左移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

 

1.3 关系运算符

        

 

        >             >=            <           <=            ==            !=

        = =等于            =赋值

 

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

        ?

        

int a=5,b=9;
int c=a>b?a:b;
printf("%d\n",c);

        这里c=a>b?a:b的意思是在a、b中取较大的一个赋值给c。

        因此c的值为9.

 

1.5 赋值运算符

        =          +=         -=        *=        /=         %=

        例如,a-=5   可看作    a=a-5;

        其他类似符号同理。

        

 

1.6 运算符优先级

        顺序:

 

        单算移关与 异或逻条赋

 

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

        算术运算符: * / % + -

        移位运算符: << >>

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

        位与运算符: &

        异或运算符: ^

        位或运算符: |

        逻辑运算符: && ||

        条件运算符: ?:

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

 

        其中单目、条件、赋值运算符的优先级是从右至左结合的。

 

 

[2]变量

        

 

        程序运行过程中会发生变化的称为变量。

 

 

 

名字

字节大小

取值范围(了解)

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  (64位)

float

单精度浮点型

4

-2^-1022~(2-2^52)^1023(64位)

double

双精度浮点型

8

 

 

 

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

 

局部变量

全局变量

定义位置

函数体内部

函数体外部

初值

未初始化,值是随机值

未初始化,值是0

存储位置

栈区

全局区

生命周期

同当前函数体共存亡

同整个程序共存亡

作用域

当前函数体内部

整个程序

 

[3]常量

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

        3.1 整型常量

        八进制 十进制 十六进制

        3.2 字符常量

        字符 由' '包裹一个字符

 

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

 

 

        3.3 标识常量

          #define X

           与赋值不同,宏的的计算要直接原样替换

            例如
 

            #define N 2

            #define M N+2

            #define NUM 2+M*3+1

            M不等于N+2=4,而是直接用N+2替换M带入NUM的计算

            所以NUM的计算步骤为 2+N+2*3+1=2+2+2*3+1=11

  作业

20735ae50fa84c6cac03428fbf1416ef.png

(k+m)带入宏SQR(X)中

            a/=(k+m)*(k+m)/(k+m)*(k+m)

            a/=3*3/3*3

从左到右运算可得 

             a/=9

             a=a/9

             a=10/9=1

所以结果为1。

 

9e1c031bbfc9424a8b411a3eb221da13.png

原样替换,则k=M+M*M+M*5=5+5*5+5*5=55

所以选C

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值