关于操作符的补充
上次我们已经说了+,-,*,/,那一节,作为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));
}
我们使用C官网上的搜索可以看他的返回这是种
C 语言规定,sizeof 返回size_t类型的值。这是一个无符号整数类型,size_t是语言定义的标准类型,新增了%zd 转换说明用于 printf()显示 size_t 类型的值。如果系统不持%zd,可使用%u或%lu代替%zd。
这里可以使用%zd去打印sizeof计算的值
2,求模运算符 %
( ˘ ³˘)❤求模运算用于于整数运算。求模运算符给出其左侧整整数除以右侧整数的余数,重要的一点是%的左右必须是整数
#include<stdio.h>
int main()
{
int a = 4;
int b = 3;
int c = a % b;
printf("%d",c);
}
如果两边都不是整数是错误的
#include<stdio.h>
int main()
{
int a = 4;
float b = 3.0;
int c = a % b;
printf("%d",c);
}
我们可以使用%作许多事 ,比如判断奇数偶数
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;
}
}
}
判断奇数
#include<stdio.h>
int main()
{
int i = 0;
for (i = 1; i < 101; i++)
{
if (i % 2 != 0)
{
printf("%d\n", i);
}
else
{
continue;
}
}
}
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);
}
++在许多的地方都使用比如循环(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;判断为假
}
}
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);
}
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);
}
6,条件运算符:?:
C提供条件表达式
作为表达if else语句的一种便捷方式,该表达式使用?:条件运算符。该运算符分为两部分,需要3个运算对象。回忆一下,带一个运算对象的运算符称为一元运算符,带两个运算对象的运算符称为二元运算符。以此类推,带 3 个运算对象的运算符称为三元运算符。条件运算符是C语言中唯一的三元运算符
条件表达式的通用形式如下:
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);
}
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("不是闰年");
}
printf("是闰年");
}
else
printf("不是闰年");
!=是不等于,!相反比如,在C语言中非0是真, 0是假,2本应该是真, 但是!2是假
对于判断而言,只有是真的才会执行,如果是假它就会停止,于是我们就可以去使用判断语句来验证这个运算
#include<stdio.h>
int main()
{
int i = 1;
if (!i)
{
printf("i没有变成假");
}
else
printf("i依旧是真");
}
8,查找地址:&运算符
(指针(pointer)是 C 语言最重要的(有时也是最复杂的)概念之一,用于存储变量的地址。前面使用的scanf()函数中就使用地址作为参数,&运算符可以让我们去访问地址,就像我们去找人,要去某市,某街道,某小区,某楼层,某房间号
#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);
}
,其他简单的运算符关系运算符和表达式
关系运算符:
每个关系运算符都把它左侧的值和右侧的值进行比较。
< 小于
<= 小于或等于
== 等于
=> 大于或等于
> 大于
!= 不等于
关系表达式:
简单的关系表达式由关系运算符及其运算对象组成。
如果关系为真,关系表达式的值为 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;
}
>>右移操作符
#include <stdio.h>
int main()
{
int a = 10;
int b = a >> 1;
printf("b= %d\n", b);
printf("a= %d\n", a);
return 0;
}
<< 左移操作符 和>> 右移操作符会有更详细的解释在后面会做的