关于操作符的补充

上次我们已经说了+,-,*,/,那一节,作为C刚刚入门的新手,写的不好庆幸的是说的是加减乘除

关于操作符的补充_运算符

今天我们说一些常常使用的一些


1,sizeof 运算符和size t类型

sizeof 运算符以字节为单位返回运算对象的大小(在C中,1字节定义为char类型占用的空间大小。过去,1字节通常是8位,但是一些字符集可能使用更大的字节)。运算对象可以是具体的数据对象(如,变量名)或类型。如果运算对象是类型(如,float),则必须用圆括号将其括起来。

我们使用代码去直观的感受一下

#include<stdio.h>

int main()  
{

	int i;

	printf("%zd\n", sizeof(int));

	printf("%zd", sizeof(i));

}

关于操作符的补充_操作符_02


我们使用C官网上的搜索可以看他的返回这是种

C 语言规定,sizeof 返回size_t类型的值。这是一个无符号整数类型,size_t是语言定义的标准类型,新增了%zd 转换说明用于 printf()显示 size_t 类型的值。如果系统不持%zd,可使用%u或%lu代替%zd。


关于操作符的补充_运算符_03


这里可以使用%zd去打印sizeof计算的值



2,求模运算符  %

( ˘ ³˘)❤求模运算用于于整数运算。求模运算符给出其左侧整整数除以右侧整数的余数,重要的一点是%的左右必须是整数

#include<stdio.h>
int main() 
{
	int a = 4;
	int b = 3;
	int c = a % b;
	printf("%d",c);
}

关于操作符的补充_运算符_04

如果两边都不是整数是错误的

#include<stdio.h>
int main() 
{
	int a = 4;
	float b = 3.0;

	int c = a % b;

	printf("%d",c);
}

关于操作符的补充_操作符_05



我们可以使用%作许多事 ,比如判断奇数偶数

1,判断偶数

#include<stdio.h>
int main() 
{
	int i = 0;
	for (i = 1; i < 101; i++)
	{
		if (i % 2 == 0)
		{
			printf("%d\n", i);
		}
		else
		{
			continue;
		}

	}

}

关于操作符的补充_运算符_06

判断奇数

#include<stdio.h>
int main() 
{
	int i = 0;
	for (i = 1; i < 101; i++)
	{
		if (i % 2 != 0)
		{
			printf("%d\n", i);
		}
		else
		{
			continue;
		}

	}

}

关于操作符的补充_操作符_07

3,递增运算符  ++

~(^з^)-☆将其运算对象递增1。该运算符以两种方式出现。第1种方式,++出现在其作用的变量前面,第2种方式,++出现在其作用的变量后面。使用代码去直观感受

#include<stdio.h>
int main() 
{
	int a, b, c;
	a = 5;
	printf("开始a的值是:%d\n", a);
	b = a++;       //先使用a,再加加

	printf("此时a的值是:%d\n", a);
	printf("在a++后,此时b的值是:%d\n", b);
	c = ++a;      //先加加,再使用a

	printf("此时a的值是:%d\n", a);
	printf("在++a后,此时c的值是:%d\n", c);


}

关于操作符的补充_操作符_08



++在许多的地方都使用比如循环(while循环,do   while循环),

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
int main() 
{
	int i = 0;
	while (i < 10)
	{
		printf("努力的一天\n");
		i++;      //这里使用i++,才能让循环停下,当i=10;判断为假
	}
}



关于操作符的补充_#include_09



4,递减运算符:--

(*^3^)/~☆每种形式的递增运算符都有一个递减运算符与之对应,用﹣﹣代替++即可:一样该运算符以两种方式出现。第1种方式,++出现在其作用的变量前面,第2种方式,++出现在其作用的变量后面。使用代码去直观感受

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
int main()
{
	int a, b, c;
	a = 5;
	printf("开始a的值是:%d\n", a);
	b = a--;       //先使用a,再减减

	printf("此时a的值是:%d\n", a);
	printf("在a--后,此时b的值是:%d\n", b);
	c = --a;      //先减减,再使用a

	printf("此时a的值是:%d\n", a);
	printf("在--a后,此时c的值是:%d\n", c);

}

关于操作符的补充_操作符_10


5,逗号运算符

逗号运算符扩展了 for循环的灵活性,以便在循环头中包含更多的表达式。逗号运算符并不局限于在 for循环中使用,但是这是它最常用的地方。逗号运算符有两个其他性质。首先,它保证了被它分隔的表达式从左往右求值 然后整个逗号表达式的值是逗号右侧表达式的值

例如,

#include<stdio.h>
int main()
{
	int a = 9;
	int b = 20;
	int c = 4;

	int i = a++; c--; a++;

	printf("%d", i);


}

关于操作符的补充_操作符_11



6,条件运算符:?:

C提供条件表达式

作为表达if else语句的一种便捷方式,该表达式使用?:条件运算符。该运算符分为两部分,需要3个运算对象。回忆一下,带一个运算对象的运算符称为一元运算符,带两个运算对象的运算符称为二元运算符。以此类推,带 3 个运算对象的运算符称为三元运算符。条件运算符是C语言中唯一的三元运算符


关于操作符的补充_运算符_12

条件表达式的通用形式如下:

expressionl? expression2: expression3

条件运算符的第二第三可以是字符串

举个例子MAX =(x>y)? x : y ;

#include<stdio.h>
int main()
{
	int a = 9;
	int b = 20;

	int MAX = a>b?a:b;

	printf("MAX:%d", MAX);


}

关于操作符的补充_运算符_13

7,逻辑运算符

假设 exp1 和 exp2 是两个简单的关系表达式

当且仅当exp1和exp2都为真时,exp1 && exp2才为真;

如果 exp1或exp2为真,则exp1 II exp2为真;

如果exp1为假,则!exp1为真;如果exp1为真,则!exp1为假。

下面是一些具体的例子:

20> 35&& 439> 400   为假,因为只有一个子表达式为真;

5>2||4>7为真,因为有一个子表达式为真;

!(4>7)为真,因为4不大于 7。

顺带一提,最后一个表达式与下面的表达式等价:

4<=7

如果不熟悉逻辑运算符或者觉得很别扭,请记住:(练习&&时间)== 完美。

&&       在英文的  and      中文的  并且

||            在英文的    or       中文的   或者

!           在英文的    not       中文的   非

&&和||的使用

例如闰年的判断;能被4整除并且不能被100整除,或者能被400整除

#include<stdio.h>
int main()
{
	int year = 0;
	printf("请输入年份");
	scanf("%d", &year);
	if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
	{

		printf("是闰年");
	}
	else
		printf("不是闰年");

}

关于操作符的补充_运算符_14

printf("是闰年");
}
else
	printf("不是闰年");

!=是不等于,!相反比如,在C语言中非0是真, 0是假,2本应该是真, 但是!2是假

对于判断而言,只有是真的才会执行,如果是假它就会停止,于是我们就可以去使用判断语句来验证这个运算

#include<stdio.h>
int main()
{
	int i = 1;
	if (!i)
	{
		printf("i没有变成假");
	}
	else
		printf("i依旧是真");
}


关于操作符的补充_操作符_15



8,查找地址:&运算符

(指针(pointer)是 C 语言最重要的(有时也是最复杂的)概念之一,用于存储变量的地址。前面使用的scanf()函数中就使用地址作为参数,&运算符可以让我们去访问地址,就像我们去找人,要去某市,某街道,某小区,某楼层,某房间号


关于操作符的补充_运算符_16

#include<stdio.h>
int main()
{
	int i = 1;
	scanf("%d", &i);
	printf("%d", i);
}

9.*运算符(解引用操作符),可以访问地址,并可以改变地址的值


#include<stdio.h>
int main()
{
	int a = 9;
	int * i = &a;   //将a的地址放到*i中
	printf("此时i的值:%d\n", i);
	 *i = 10;
	printf("访问之后,此时a的值:%d\n", a);
	

}

关于操作符的补充_运算符_17


,其他简单的运算符关系运算符和表达式

关系运算符:

每个关系运算符都把它左侧的值和右侧的值进行比较。

     <     小于

     <=     小于或等于

      ==     等于

    =>      大于或等于

        >     大于

       !=     不等于


关系表达式:

简单的关系表达式由关系运算符及其运算对象组成。

如果关系为真,关系表达式的值为 1; 如关系为假,关系表达式的值为0。

示例:

50> 27为真,关系表达式的值为 1

(2 + 5) == 8 为假,关系表达式的值为 0






赋值运算符:

下面的运算符用右侧的值,根据指定的操作更新左侧的变量:

+=        把右侧的值加到左侧的变量上

-=        从左侧的变量中减去右侧的值

*=        把左侧的变量乘以右侧的值

/=        把左侧的变量除以右侧的值

%=      左侧变量除以右侧值得到的余数





10最后移位操作符

<< 左移操作符

>> 右移操作符

注:移位操作符的操作数只能是整数。

<< 左移操作符:

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

关于操作符的补充_操作符_18

>>右移操作符

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


关于操作符的补充_#include_19

<< 左移操作符 和>> 右移操作符会有更详细的解释在后面会做的





关于操作符的补充_#include_20