当前位置:网站首页>c语言---7 初识操作符
c语言---7 初识操作符
2022-06-10 17:31:00 【要努力丫!】
1、算术操作符
算术操作符包括+ - * / %(加、减、乘、除、取模/取余)
#include <stdio.h>
//操作符
int main()
{
int a = 9 / 2;
printf("%d\n",a);
return 0;
}
将语句int a = 9 / 2;printf("%d\n",a);改为float a = 9 / 2; printf("%f\n",a);,运行结果从4变为4.000000,始终算不出来4.5,因为C语言中的除法只计算商,不计算余数,也不会算出小数。所以9/2=4,若想要求出精确的结果,可以将除号两端任意一个数字改为小数,就可以得到准确结果了。
2、位移操作符
位移操作符包括<<(左移)和>>(右移)
int main()
{
int a = 2;
int b = a << 1;
printf("%d\n",b);
return 0;
}
运行结果为4.因为左移操作符移动的是二进制位。a=2----》表示为二进制是10,由于a是存放到整型里面的,整型所占的内存大小是4个字节,4个字节是32个比特位,所以:
左移一位之后,最左边的0丢失,在最右边补零,变为
00000000 00000000 00000000 00000100,表示为十进制为4。(左移时,最后一位永远补零)
3、位操作符
位操作符包括按位与&、按位或|、按位异或^
4、赋值操作符
赋值操作符包括:= += -= *= /= &= ^= |= >>= <<=
5、单目操作符
| ! | 逻辑反操作 |
|---|---|
| - | 负值 |
| + | 正值 |
| & | 取地址 |
| * | 间接访问操作符(解引用操作符) |
| sizeof | 操作符的类型长度(以字节为单位) |
| ~ | 对一个数的二进制按位取反 |
| – | 前置、后置– |
| ++ | 前置、后置++ |
| 类型 | 强制类型转换 |
说明:对于“a+b”来说,“+”有2个操作数,故为双目操作符;单目操作符只有一个操作数。
(1)逻辑反操作
在C语言中有规定:0表示假,非0就是真。
int main()
{
int a = 10;
printf("%d\n",!a);
return 0;
}
运行结果为:0.因为10为真,故!10为假,所以运行结果为0.
int main()
{
int a = 0;
printf("%d\n",!a);
return 0;
}
运行结果为1.当把假变成真的时候,真的数有很多,规定结果为1.
“!”的真正用法是:
int main()
{
if (a)
{
//当a为真,要执行什么操作
}
if (!a)
{
//当a为假,又要执行什么操作
}
return 0;
}
(2)sizeof是一个操作符,用来计算变量或类型的大小。
int main()
{
int a = 10;
printf("%d\n",sizeof(int));
printf("%d\n", sizeof(a));
return 0;
}
运行的结果都是4,因为a的类型是int类型。printf("%d\n", sizeof(a));中sizeof后面的括号可以省略,意味着sizeof是操作符,不是函数。但是函数后面的括号是不可以省略的。sizeof求变量的话,括号可以省略,但求类型的时候,括号不可以省略,如:sizeof(int)。 可是在通常情况下,使用sizeof的时候,括号都不省略。
思考:sizeof是否能计算数组的大小呢?
int main()
{
int arr[10] = {
0 };
printf("%d\n",sizeof(arr));
printf("%d\n", sizeof(arr[0]));
int sz = sizeof(arr) / sizeof(arr[0]);//计算元素个数
printf("%d\n",sz);
return 0;
}
运行结果为:
40
4
10
因为定义的数组是包含10个0元素的数组,而这10个0零元素每一个都是一个int类型,每个int类型都是4个字节,所以对于整个数组来说,它的长度就是10x4等于40个。对于数组中的第一个元素来说,它的长度是4个字节。
(3)按位取反
“~”为按位取反,按二进制位取反,将所有的二进制位都取反,1变为0,0变为1.
int main()
{
int a = 0;
printf("%d\n",~a);
return 0;
}
运行结果为:-1
对于正整数来说,其原码、补码、反码都是一样的。
(4)前置++、后置++
int main()
{
int a = 10;
int b = ++a;//前置++:先++,后使用
printf("%d\n",a);
printf("%d\n", b);
return 0;
}
运行结果为:
11
11
前置++:先让a执行++操作,然后再将此时a的值赋给b,所以运行结果均为11
int main()
{
int a = 10;
int b = a++;//后置++:先使用,后++
printf("%d\n", a);
printf("%d\n", b);
return 0;
}
运行结果为:
10
11
后置++:先把a的值赋给b,然后a再执行++操作。
(5)括号里面放入类型–》“(类型)”为强制类型转换
int main()
{
int a = 3.14;
printf("%d\n",a);
return 0;
}
运行该程序的时候,虽然不会报错,但是会警告:warning C4244: “初始化”: 从“double”转换到“int”,可能丢失数据
将int a = 3.14;改为int a = (int)3.14;即可正确运行。
6、关系操作符
关系操作符包括:> >= < <= !=(用作测试“不相等”) ==(用作测试“相等”)
7、逻辑操作符
逻辑操作符包括&&(逻辑与)、||(逻辑或)
int main()
{
int a = 3;
int b = 5;
int c = a && b;
printf("%d\n",c);
return 0;
}
运行结果为:1,因为3与5都是真,所以两者作“逻辑与”操作的结果也是真。
若将b=5改为b=0,则结果为0
将int c = a && b;改为int c = a|| b;,则运行结果仍为1.
8、条件操作符(三目操作符)
exp1?exp2:exp3,意为exp1成立,则计算exp2,整个表达式的结果是exp2的结果;若exp1不成立,则整个表达式的结果是exp3的结果。
int main()
{
int a = 0;
int b = 3;
int max = 0;
if (a > b)
max = a;
else
max = b;
printf("%d\n", max);
return 0;
}
这段代码中的if else结构就可以写作:
max = a > b ? a : b;
9、逗号表达式
逗号表达式是用逗号隔开的一段表达式exp1,exp2,...,expN,逗号表达式的特点是会从左向右依次计算,整个逗号表达式的结果是最后一个表达式的结果。
int main()
{
int a = 0;
int b = 3;
int c = 5;
int d = (a = b + 2, c = a - 4,b=c+2);
printf("%d\n",d);
return 0;
}
运行结果为a3.运行完此段代码之后,a=3+2=5;c=5-4=1;b=c+2=1+2=3
10、下标引用、函数调用和结构成员
[] () . ->
int main()
{
int arr[10] = {
1,2,3,4,5,6,7,8,9,10};
printf("%d\n",arr[5]);
return 0;
}
这段代码中的arr[5]的方括号就是下标引用操作符。
再有就是在调用函数的时候,函数名后边的()就是函数调用操作符,比如printf("hello\n")
边栏推荐
- 云计算搭建全部内容总结,保证可以搭建一个完整的云计算服务器,包括节点安装、实例的分配和网络的配置等内容
- 2022 version of idea graphical interface GUI garbled code solution super detailed simple version
- mmdetection之model构建
- well! One new star, please look over | elder martial brother and elder martial sister say
- 红色垂直左侧边菜单导航代码
- CUDA编程(一):实现两个数组相加
- Jouer avec la classe de fonctions de pytorch
- 第七部分:第二课 顾问通用技能-如何安装和卸载SAP ERP系统客户端
- LeetCode 321. 拼接最大數***
- Aesthetic experience (episode 237) Luo Guozheng
猜你喜欢

微信小程序仿陶票票课程设计

JS blur shadow follow animation JS special effect plug-in

How will you integrate into the $20trillion "project economy" in five years

Why 0.1+0.2=0.3000000000000004

聊聊远程办公那些事儿,参与征文领稿费拿大奖!

Penguin E-sports stops, and tiger teeth are hard to walk

Leetcode 875. Coco, who likes bananas

LoRa模块无线收发通信技术详解

Postman-接口测试工具

yml文件配置参数定义字典和列表
随机推荐
苹果期待的「无密码时代」,真能实现吗?
Wireshark learning notes (I) common function cases and skills
仅需三步学会使用低代码ThingJS与森数据DIX数据对接
[FAQ] summary of common problems and solutions during the use of rest API interface of sports health service
关于目前CIM(BIM+GIS)行业的一些看法
一个WPF开发的打印对话框-PrintDialogX
你还在手写TS类型代码吗
Postman interface test tool
Abbexa 1,3-二棕榈素 CLIA 试剂盒解决方案
分享我做Dotnet9博客网站时积累的一些资料
LeetCode 321. 拼接最大数***
ZigBee模块无线传输星形拓扑组网结构简介
Why 0.1+0.2=0.3000000000000004
软考不通过能不能补考?解答来了
2022上半年信息系统项目管理师论文真题
Abbexa低样本量鸡溶菌酶 C (LYZ) ELISA 试剂盒
well! One new star, please look over | elder martial brother and elder martial sister say
Talk about those things about telecommuting, participate in the essay solicitation, receive the contribution fee and win the grand prize!
IP summary (tcp/ip volumes 1 and 2)
如何定位游戏发热问题