C语言零基础学习笔记5——C语言数据类型和变量(二)

本节大纲


一、数据类型介绍

二、signed和unsigned

三、数据类型和取值范围

四、变量

五、算术操作符:+、-、*、\、%

六、赋值操作符和复合赋值符

七、单目操作符:++、--、+、-

八、强制类型转换


五、算术操作符:+、-、*、/、% 

        当程序员写代码的时候,一定会涉及到计算。所以C语言为了方便运算,提供了一系列操作符,其中有一组操作符就称为算术操作符。分别为:+、-、*、/、%,这五个算术操作符都是双目操作符。

        上面所提及的操作符在有一些教材上也称为运算符,这两者只是翻译不同,含义是一样的。

(一)、+ 和 -

        + 和 - 很好理解,就是我们常见用来实现加法和减法。

        并且在使用时我们很容易观察到,+ 和 - 都是有两个操作数的,位于操作符(运算符)两端的就是他们的操作数,而这种左右两端各有一个操作数的操作符叫做双目操作符。

        下面这段代码简单演示了 + 和 - 这两个操作符的使用方式:

#include <stdio.h>
int main()
{
	int x = 4 + 22;
	int y = 61 - 23;
	printf("x=%d\n", x);
	printf("y=%d", y);
	return 0;
}
(二)、*

        运算符 * 用来实现乘法运算。

        下面这段代码简单演示了 * 这个操作符的使用方式:

#include <stdio.h>
int main()
{
	int z = 5;
	printf("num = %d", z * z);
	return 0;
}
)、/

        运算符 / 用来实现乘法运算。

        如果操作符的两端如果均为整数,执行的就是整数除法,得到的结果也会是整数,没有小数也没有余数。即使我们将变量类型定义为 float (浮点数)类型,如果操作符两边均为整数,那么得到的结果也会是一个整数。

        如果我们希望得到一个浮点数的结果,那么两个操作数必须有一个是浮点数,此时C语言就会进行浮点数除法。

        观察下面这段代码,展现了关于 / 操作符的基本操作以及整数除法、浮点数除法的基本规则:

#include <stdio.h>
int main()
{
	int a = 6 / 4;
	float b = 6 / 4;
	float c = 6.0 / 4;
	float d = 6 / 4.0;
	printf("a = %d\n", a);
	printf("b = %f\n", b);
	printf("c = %f\n", c);
	printf("d = %f\n", d);
	return 0;
}

        这段代码的运行结果为:

        所以我们可以进行一些简单的计算练习: 

#include <stdio.h>
int main()
{
	int score = 5;
	score = (score / 20) * 100;
	return 0;
}

        对于上面这段代码,如果认为score经过计算之后等于25,那么你的结果就错了,实际上score的值等于0,这就是因为(score / 20)是一个整除,结果为0。如果想使score得25,那我们需要将代码修改如下: 

#include <stdio.h>
int main()
{
	int score = 5;
	score = (score / 20.0) * 100;
	return 0;
}

        这样(score / 20.0)就变成了一个浮点数除法,也就使score的值经过计算之后得到了25。

        此外还有一点需要提醒大家注意的,如果我们在定义变量的时候出现了如下语句:

	int score = 5.5;

        这违反了我们对int类型的定义,此时编译器会自动忽略小数点后部分,将score赋值为5,但往往此时编译器就会报错。

(四)、%

        操作符 % 表示求模(取余)运算,即返回两个整数相除的余数。但是注意这个操作符只能用于整数,不能用于浮点数。

        负数求模的规则是:结果的正负号由第一个运算符的正负号决定。

        下面这段代码简单演示了 % 这个操作符的使用方式:

#include <stdio.h>
int main()
{
	printf("%d\n", 6 % 4);
	printf("%d\n", 11 % -5);
	printf("%d\n", -11 % -5);
	printf("%d\n", -11 % 5);
	return 0;
}

        这段代码的运行结果为:


 赋值操作符和复合赋值符

        在变量创建的时候给一个初始值叫做初始化,在变量创建好后,再给一个值,叫做赋值。赋值操作符 = 是一个随时可以给变量赋值的操作符,就像下面这段代码,展示了什么叫做初始化,什么叫做赋值以及赋值操作符如何给变量赋值:

#include <stdio.h>
int main()
{
	int a = 0;	//这是初始化,将整型变量a初始化值0
	a = 10;	//这是赋值,将a赋值10,这里就是使用了赋值操作符
	a = 20;	//这也是赋值,将变量a的值由10更改为20
	return 0;
}
 )、连续赋值

        赋值操作符支持连续赋值,即将几个不同变量写在同一行赋值,赋值的时候是从右向左依次赋值。C语言虽然支持这种连续赋值,但是写出的代码不容易理解,同时调试的时候也容易出现问题,所以建议还是拆开来写,这样方便观察代码的执行细节,下面这段代码展现了连续赋值的基本语法以及将其展开后的效果:

#include <stdio.h>
int main()
{
	int b = 3;
	int c = 5;
	int d = 0;
	d = c = b + 3;	//这就是连续赋值,从右向左依次赋值
	//这条连续赋值语句等价于下面这两条语句
	c = b + 3;
	d = c;
	return 0;
}
(二)、复合赋值符

        在程序员写代码的时候,往往会运用到一个变量的自增、自减、自乘等一系列操作。那么我们往往需要编写以下代码:

	int x = 10;
	x = x + 3;
	x = x - 2;

        此时C语言给出了一种更为简单、便捷的写法可以达成相同的效果,便是复合赋值符,具体使用如下:

int x = 10;
	x += 3;		//等价于x = x + 3;
	x -= 2;		//等价于x = x - 2;

         同理我们可以实现一系列自乘、自除、自取余的操作。

        C语言中提供了丰富的复合赋值符号来方便我们编写,具体有:+= 、-= 、*= 、/= 、%= 、>>= 、<<= 、&= 、|= 、^= 。部分的操作符我们还不了解其含义,在后面的内容中会逐渐涉及。


单目操作符:++ 、-- 、+ 、-

        前面介绍的操作符都是双目操作符,因为其左右两边各有一个操作数。但是在C语言当中还有一些操作符只有一个操作数,被称为单目操作符。++ 、-- 、 + 、- 就是一组单目操作符。下面我们就来在学习这四个单目操作符。

(一)、++ 和 --

        ++ 是一种自增的操作符,细致又分为前置++和后置++ ; -- 是一种自减的操作符,细致又分为前置--和后置--。

1、前置++

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

        ++ 的操作数是a,此时++是在a的前面的,这就是前置++,而前置++的计算公式是先自增,再使用。所以对于上面这段代码,a先自增1变成11,再赋值给b,那么此时a和b的值就都变成11了。这段代码变成我们好理解的样子是:

#include <stdio.h>
int main()
{
	int a = 10;
	int b = 0;
	a = a + 1;
	b = a;
	printf("a = %d\nb = %d\n", a, b);
	return 0;
}

2、后置++

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

        ++ 的操作数是a,此时++是在a的后面的,这就是后置++,而后置++的计算公式是先使用,再自增。所以对于上面这段代码,a先赋值给b,使b的值成为10,a再进行自增运算成为11。这段代码变成我们好理解的样子是:

#include <stdio.h>
int main()
{
	int a = 10;
	int c = a;
	a = a + 1;
	printf("a = %d\nc = %d\n", a, c);
	return 0;
}

3、前置-- 和后置--

        理解了前置++和后置++之后,前置-- 和后置--就很好理解了,只是把自增运算改为自减运算而已。前置-- 的计算法则是先自减,再使用;后置-- 的计算法则是先使用,后自减。下面我用一个代码来展示前置-- 和后置-- 的使用:

int main()
{
	int x = 10;
	int y = --x;	//前置--,先自减,再使用
	int z = x--;	//后置--,先使用,再自减
	printf("x = %d\ny = %d\nz = %d", x, y, z);
	return 0;
}

        这段代码的运行结果为:

(二)、+(正号) 和 -(负号)

        运算符 + 对正负值没有任何影响,是一个完全可以省略的运算符号,当然我们在程序中写了也不会报错。而运算符 - 可以用来改变一个值的正负号,负数的前面加上 - 就会得到一个正数,正数的前面加上一个 - 会得到一个负数。因为他们仅有一个操作数,因此也是单目操作符。

        下面这段代码我展现了我们常见的用到 + 和 - 的情况:

#include <stdio.h>
int main()
{
	int a = +10;	//等价于int a = 10;
	int b = -a;
	int c = -10;
	int d = -c;
	printf("a = %d\n", a);
	printf("b = %d\n", b);
	printf("c = %d\n", c);
	printf("d = %d\n", d);
	return 0;
}

         这段代码的运行结果为:


 八、强制类型转换

        在操作符中还有一种特殊的操作符是强制类型转换,语法形式很简单。处理问题的情景我们上面也有提及:

#include <stdio.h>
int main()
{
	int num = 3.14;
	//num我们定义的类型是整型,但是3.14是一个double类型
	//此时打印的话编译器会警告,输出的结果我们上面提及过为3
	printf("num = %d", num);
	return 0;
}

        为了消除编译器的警告,我们可以使用强制类型转换,具体使用方式如下:

int num = (int)3.14;

        这样就把3.14的float类型强制转换为了int类型,代码的输出结果不会改变。当然,强扭的瓜不甜,我们使用强制转化类型往往是在万不得已的情况下使用,如果不需要强制转化类型就可以实现代码,这样自然是更好的。

  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值