新手小白自学C语言第三天

今天是自学的第三天,主要学了操作符,常见关键字等,同样是先大概了解,以后在进行仔细学习,以下是今天的学习成果。

目录

操作符

算数操作符

移位操作符

位操作符

 赋值操作符

单目操作符

exp1 ? exp2 : exp3

static关键字

static关键字修饰局部变量

static修饰全局变量

static修饰函数


操作符

算数操作符

算数操作符 : +   -    *    /   %

/:取商 %:取模

 

由上述代码可以明显的看出'/','%' 分别是取商和取余。

移位操作符

移(二进制)位操作符 :>>(右移)   <<(左移)

 

我们知道,整型1占4个字节,也就是32个bit,即0000 0000 0000 0000 0000 0000 0000 0001,当a左移2时,变为:0000 0000 0000 0000 0000 0000 0000 0100,转换成十进制为2^2=4,所以打印出b的值为4。右移同左移一样。

位操作符

 (二进制)位操作符:&(按位与)     |(按位或)     ^(按位异或)

 

4的二进制数为100,5的二进制数为101

按位与:对应的二进制位只有都为1,才为1。100&101结果为100,100的二进制数为4,即打印出的b是4。

按位或:对应的二进制位只要有一个为1,就为1。100|101结果为101,101的二进制数为5,即打印出的b是5。

按位异或:对应的二进制位相同为0,不同为1。100^101结果为001,001的二进制数为1,即打印出的b是1。

 赋值操作符

赋值操作符: =   +=  -=  *=  /=  &=  ^=  |=   >>=  <<=

'='为把右边的值赋给左边。

比如说:a = a + 1;就等于a += 1;上边同理。 

单目操作符

逻辑反操作
-负值
+正值
&取地址
sizeof操作数的类型长度(以字节为单位)
~

对一个数的二进制按位取反

--前置、后置--
++前置、后置++
*间接访问操作符
(类型)强制类型转换

 

#include <stdio.h>
#include <string.h>

int main()
{
	int a = 10;
	int arr[] = {1,2,3,4,5,6};//6*4=24
	printf("%d\n",sizeof(a));//4
	printf("%d\n",sizeof(int));//4
	printf("%d\n",sizeof a);//4 
	//可以看出sizeof不是一个函数  是一个操作符
	//printf("%d\n",sizeof int);//会出错误,不能这么写
	printf("%d\n",sizeof(arr));//24  计算数组大小,单位是字节 
	printf("%d\n",sizeof(arr)/sizeof(arr[0]));//6
	return 0;
}

sizeof 以前也提到过,就是计算类型的长度,整型占4个字节,所以sizeof(a)打印出来为4,可以把a那个括号省略掉,可以看出sizeof不是一个函数,而是一个操作符。

我们主要看一下++和--

#include <stdio.h>

int main()
{
	int a = 1;
	int b = a++;//后置++,先使用再++
	int c = ++a;//前置++,先++再使用
	printf("a = %d b = %d c = %d\n",a,b);//a = 3 b = 1 c = 2
	int d = 6;
	int e = d--;//后置--,先使用在--
	printf("d = %d e = %d\n",d,e);//d = 5 e = 6
	int f = 4;
	int g = --f;//前置--,先--再使用
	printf("f = %d g = %d\n",f,g);//f = 3 g = 3
	return 0;
}

a++  后置++,先使用再++

也就是b先被赋值为a原本的值,然后a再进行++,所以打印出来a = 2 , b = 1 

++a  前置++,先++再使用

也就是a先++变为2,然后再把2赋值给c,所以打印出来a = 3 , c = 2 

d--  后置--,先使用再--

也就是e先被赋值为d原本的值,然后d再进行--,所以打印出来d = 5 , e = 6

--f  前置--,先--再使用

也就是f先--变为3,然后再把3赋值给g,所以打印出来f = 3 , g = 3 

 以上就是++和--的简单的代码描述。

exp1 ? exp2 : exp3

exp1 ? exp2 : exp3  当exp1语句为真时,执行exp2,为假时,执行exp3

让我们举个例子,判断两个数的大小,输出最大的数

#include <stdio.h>

int main()
{
	int a , b , max;
	printf("请输入a:");
	scanf("%d",&a);
	printf("请输入b:");
	scanf("%d",&b);
	max = (a>b ? a : b);
  //exp1 ? exp2 : exp3  当exp1语句为真时,执行exp2,为假时,执行exp3
	
	if (a>b)
	{
		printf("max:%d\n",max);
	}
	else
	{
		printf("max:%d\n",max);
	}
	return 0;
}

这就是一个简单的例子,可以让我们直观的看出来 exp1 ? exp2 : exp3 语句的使用方法。

static关键字

static关键字修饰局部变量

修饰局部变量,使局部变量的生命周期变长

static修饰全局变量

 改变了变量的作用域,让静态的全局变量只能在自己的源文件里边使用,出了源文件就不能在使用了。

 

 

我们在同一个项目中又创建了一个源文件,在里边定义一个变量,这是全局变量,我们在另一个源文件里边用extern来声明这个变量,再编译运行,发现能运行成功,我们能够使用这个全局变量。

 

 

 当我们在这个全局变量的前边加上一个static,这是一个静态局部变量,这时候当我们再次运行时我们发现出现了错误,这说明变量的作用域被改变了,除了自己的源文件,其他都不能使用这个全局变量。

static修饰函数

static 修饰函数就是改变了函数的链接属性,从外部链接变成了内部链接。

 

 我们同样可以用extern来调用这个函数,当我们加上static时,还能调用吗?让我们来试一下。

 

 同样是出现错误,不能被编译运行,static改变了函数的链接属性,从外部链接变成了内部链接。

这就是我今天学习的内容,有错误请指正,感谢大家,希望每个人都越来越好!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值