2025 0704作业

PART 1 思维导图

Day5

一.常量

1.只能作为右值

运行过程中不能更改

    2.整形常量

例:1,2,3,4

3.浮点型常量

例:3.14

4.字符型常量

例:’a’  ‘b’

5.字符串常量

例:”abc”  “1234”

数据类型里没有字符串型 但是有字符串常量

6.宏定义常量

(1).无参宏

格式:#define 宏名 宏体

例:#define a 13(将a 定义为13,在程序里的a都为13)

(2).有参宏

格式:#define 宏名(参数1,参数2...参数3) 宏体

例:#define Max(a,b) a>b?a:b(输入Max(a,b)可比较a,b的大小)

(3).用于带参宏的参数

#define STR(n) #n

printf(“%s\n”,STR(hello));

              

prtinf语句在执行完预处理操作后会变为

printf("%s\n","hello");其中hello的””是#的功能

否则无法输出字符串hello

7.宏定义注意事项

        1.定义在主函数上面,在头文件下面

        2.宏名一般为大写方便与变量名区分

        3.宏体尽量不要有语法错误,因为预处理阶段不会判断对错,宏体会直接替换,后导致报错

二.运算符

1.算数运算符

        1.+ - *

        2./   例:a/b 两边皆为整数输出则是取整 只要有一个是浮点型则输出是浮点型

        3.%   例:a%b 取余,4%3 = 1 两数都必须为整形

2.自增自减运算符

        1.前自增:a++ a—

运算结果为a,自增前的结果,后续用到的a为自增后的结果

        2.后自增:a++ a—

运算结果为a+1

        3.例题:int a = 6;

 printf(“%d %d”,a++,++a)

输出的两个%d分别为 7 8

运算过程:有两个有两个即以上运算时,先从右往左运算,++a令a变为7,然后a++输出的时自增前的值,所以输出7,然后将a++自增后的值赋给第二个%d输出

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

输出的两个%d分别为 8 6

运算过程:一样先计算a++,但是输出的是自增前的数,所以第二个%d输出为6,经过a++后付给++a的a值为7,所以++a输出8

3.赋值运算符

        1.= 就是C中的赋值运算符

左值:一般变量就是左值,左值是既可以放在赋值运算符左侧也可以放在赋值运算符右侧的值

右值:一般常量就是右值,右值是只能放在赋值运算符右侧的值

        2.运算符     表达式     逻辑

+=         a+=1       a=a+1

%=         a%=1       a=a+1

4.条件运算符

        1.C语言中唯一一个三目运算符

0为假其他全为真

        2.格式

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

执行逻辑: 如果表达式1成立,执行表达式2,否则执行表达式3

        3.例:

                b?a:b如果a大于b则输出a否则输出b

5.关系运算符

  1. 运算符     表达式     逻辑

        >= >,<,<= 

        !=             a!=b         a,b不相等为真否则为假

        ==            a==b        a,b相等为真否则为假

  6.逻辑运算符

        1.运算符     表达式                      逻辑

&&         表达式1&&表达式2     如果表达式1和2都是正确则为真

||            表达式1||表达式2       表达式1和2只要有一个为真则为真

        2.逻辑短路现象

                a.逻辑与运算(&&)左侧的表达值为假,右侧不会执行

        例:int a=1,b=2;

                         printf(”%d”,--a&&b++);//真,1

                         printf(“%d”,a);//0

                         printf(“%d”,b);//2

                         因为—a是0,则&&右侧不执行,b还是2;

                b.逻辑或运算(||)左侧的表达值为真,右侧不会执行

        例:int a=1,b=2;

                         printf(”%d”,a--||b++);//真,1

                         printf(“%d”,a);//0

                         printf(“%d”,b);//2

                         因为a—比较的a值还是1,则||右侧不执行,b还是2;

7.逗号运算符

        1.格式:(表达式1,表达式2,表达式3)

        可以有多个表达式,并且每一个表达式都会执行,获取最右侧一个表达式的结果

        2.例:int n1 = 3,n2 = 9;

       int c = (n1++,--n2,n2&&n1,n1+3); 先执行n1++n1->4,--n2令n2->8

                  printf("c=%d\n",c); n1(4)+4 = 7

        printf("n1=%d\tn2=%d\n",n1,n2); n1(4) n2(8)

8.sizeof运算符

        1.功能:求数据所占的字节数

        2.例:sizeof(int)//4byte

   

                   char a[] = “abcde”

                   sizeof(a)/sizeof(char)//求字符串长度,5

9.位运算符

        1.位运算符是对二进制进行操作的

 1100 0101<<2 = 0001 0100

        2.运算符           表达式     逻辑

>>                 a>>2         a右移2位,实际等于*2^2

<<                 a<<2         a左移两位,等于/2^2

&                   a&b           都为真,否则为假

|                    a|b             一个为真为真,否则为假

^按位异或     a^b            同0异1

          `按位取反     `a               0011 ->1100

PART 2 如何交换两个数的值

#include<myhead.h>

int main(int argc, const char *argv[])
{
	int a = 1,b = 2;
	int c = a;
	a = b;
	b = c;
	printf("%d %d\n",a,b);
	return 0;
}

PART 3 已知unsigned int a; 在不改变其他bit的基础上,将a的第4个bit位置0;将a的第6个bit位置1,将a的第2个bit位取反(bit位默认从第0位开始)

#include<myhead.h>

int main(int argc, const char *argv[])
{
	unsigned int a = 12;//0000 1100
	a &= (2^8-1-2^4);//1110 1111令第四位为零
    // 0000 1100 & 1110 1111 = 0000 1100
	a |= 2^6;//0100 0000令第六位为0
    // 0000 1100 | 0100 0000 = 0100 1100
	a ^= (1 << 2);//0000 0100令第二位取反
    // 0100 1100 ^ 0000 0100 = 0100 1000

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值