操作符
先了解一下操作符的种类
算数操作符:
+ - * / %
我们来看一下其中几种操作符
/操作符
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
int a = 9 / 2;
printf("%d\n", a);
return 0;
}
算出来的结果是4,因为用了整型,假如我们想算出小数,是不是将int换成float就行了呢?
接下来我们来试一试
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
float a = 9 / 2;
printf("%f\n", a);
return 0;
}
发现结果是4.000000,为什么会出现这种情况,因为两个整数执行的是整数除法,算出的是4
假如我们想得到小数,我们得将两整数至少其中一个改成小数形式
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
float a = 9 / 2.0;
printf("%f\n", a);
return 0;
}
这样得到的结果就是4.500000
我们再来看一下%操作符
这个操作符的意思是取模(余)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
int a = 9 % 2;
printf("%d\n", a);
return 0;
}
结果就是1,因为9除以2余1
注:作用于两个整型数(正整数、负整数),运算结果是两数相除后的余数,运算结果为整数
移位操作符
<< (左移操作符) >>(右移操作符)
移动操作符移动的是二进制序列
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
int a = 2;
int b = a << 1;
printf("%d", b);
return 0;
}
a=2,因为移位操作符移动的是二进制序列,而a被标识为整型,为4个字节,32个比特位
所以a的二进制序列为
00000000|00000000|00000000|00000010
当它左移一次之后
b为00000000|00000000|00000000|00000100
所以运行的结果为4
右移操作符也同理
位操作符(先了解一下)
& ^ |
& 按位余
^ 按位异或
| 按位或
赋值操作符
= += -= *= /= &= ^= |= >>= <<=
我们来了解几个操作符的意思
比如
a=a+5可以写成a+=5
b=b-6可以写成b-=6
单目操作符
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 取操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
什么是单目操作符
a+b
+的左右两边有2个操作数,所以a位双目操作符
+a只有右边1个操作数,这个时候为单目操作符
我们可以知道,只有一个操作数的操作符就是单目操作符
我们来看一下!,c语言中0是假,非0位真
而!会将假的变成真的,真的变成假的
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
int a = 5;
printf("%d", !a);
return 0;
}
所以运行的结果是0
int a = 0;
假如将int a=0;改成上述代码,那么运行结果就是1
因为真默认为1
再来看一下sizeof操作符
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
int a = 10;
printf("%d\n", sizeof (int));
printf("%d\n", sizeof a);
return 0;
}
sizeof(a)后面的括号可以省略,因为sizeof不是函数,但是sizeof(int)不能省略,因为语法不支持
sizeof计算字符串大小时候,会计算后面的/0