C语言学习笔记—P13(操作符详解<1>+图解+题例)
目录
前言:●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!
——By 作者:新晓·故知
操作符详解<1>:
题例:
1. 操作符分类:
算术操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
下标引用、函数调用和结构成员
2. 算术操作符
+ - * / %
注:
当 /(除号) 两端都是整数的时候,执行的是整数除法,两端只要有一个浮点数,执行的就是浮点数的除法
3.移位操作符
4. 位操作符
5. 赋值操作符
复合赋值符:
6.单目操作符
——Since 新晓-故知
前言:
●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!
——By 作者:新晓·故知
操作符详解<1>:
题例:
#include <stdio.h> int main() {//(3,4) - 逗号表达式,结果是最后一个表达式的结果int arr[] = { 1,2,(3,4),5 };printf("%d\n", sizeof(arr));return 0; }
#include <string.h> #include <stdio.h> int main() {char str[] = "hello bit";printf("%d %d\n", sizeof(str), strlen(str));return 0; }
//创建一个整形数组,完成对数组的操作 // //实现函数init() 初始化数组为全0 //实现print() 打印数组的每个元素 //实现reverse() 函数完成数组元素的逆置。#include <stdio.h>void init(int arr[], int sz) {int i = 0;for (i = 0; i < sz; i++){arr[i] = 0;} }void print(int arr[], int sz) {int i = 0;for (i = 0; i < sz; i++){printf("%d ", arr[i]);}printf("\n"); }void reverse(int arr[], int sz) {int left = 0;int right = sz-1;while (left<right){int tmp = arr[left];arr[left] = arr[right];arr[right] = tmp;left++;right--;} }int main() {int arr[10] = {1,2,3,4,5,6,7,8,9,10};//initint sz = sizeof(arr) / sizeof(arr[0]);print(arr, sz);reverse(arr, sz);print(arr, sz);//init(arr, sz); init(arr[10],sz)是数组第11个元素,访问越界,因此传参只需传递数组名arr//print(arr, sz);return 0; }
将数组A中的内容和数组B中的内容进行交换。(数组一样大)int main() {int arr1[] = { 1,3,5,7,9 };int arr2[] = { 2,4,6,8,10 };//交换int tmp = 0;int i = 0;int sz = sizeof(arr1) / sizeof(arr1[0]);for (i = 0; i < sz; i++){tmp = arr1[i];arr1[i] = arr2[i];arr2[i] = tmp;}return 0; }
1. 操作符分类:
算术操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
下标引用、函数调用和结构成员
2. 算术操作符
+ - * / %
注:
1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。
2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。
int main() {//int ret = 10 % 3;//% - 取模(余) - 得到的是相除之后的余数int ret = 10 / 3;//除法 - 商printf("%d\n", ret);当 /(除号) 两端都是整数的时候,执行的是整数除法,两端只要有一个浮点数,执行的就是浮点数的除法//double ret = 10.0 / 3.0;//printf("%lf\n", ret);//10.0 % 3;//errreturn 0; }
当 /(除号) 两端都是整数的时候,执行的是整数除法,两端只要有一个浮点数,执行的就是浮点数的除法
移位运算 int main() {int a = -5;//把a在内存中存储的二进制位向左移动2位int b = a << 2;printf("%d\n", b);printf("%d\n", a);//int a = -1;return 0; }
3.移位操作符
1.<<左移操作符
>> 右移操作符 注:移位操作符的操作数只能是整数。
左移操作符 移位规则: 左边抛弃、右边补0
2.右移操作符
移位规则: 首先右移运算分两种: 1. 逻辑移位 左边用0填充,右边丢弃 2. 算术移位 左边用原该值的符号位填充,右边丢弃
警告⚠ :
对于移位运算符,不要移动负数位,这个是标准未定义的。
例如: int num = 10; num>>-1;//error
4. 位操作符
& //按位与
| //按位或
^ //按位异或
注:他们的操作数必须是整数。
不能创建临时变量(第三个变量),实现两个数的交换
#include <stdio.h> int main() {int a = 10;int b = 20;a = a ^ b;b = a ^ b;a = a ^ b;printf("a = %d b = %d\n", a, b);return 0; }
方法1问题:繁琐,但常用
方法2问题:可能超出整型范围
方法3问题:异或不常用
int main() {int a = 0;//~ 按(内存中补码的2进制)位取反//00000000000000000000000000000000//11111111111111111111111111111111 - 补码//11111111111111111111111111111110 - 反码//10000000000000000000000000000001 - 原码 --> -1printf("%d\n", ~a);return 0; }
int main() {int a = 10;a |= (1 << 2);printf("%d\n", a);a &= ~(1 << 2);printf("%d\n", a);//00000000000000000000000000001010//00000000000000000000000000000100 1<<2//00000000000000000000000000001110//11111111111111111111111111111011 ~(1<<2)//00000000000000000000000000001010return 0; }
5. 赋值操作符
赋值操作符是一个很棒的操作符,他可以让你得到一个你之前不满意的值。也就是你可以给自己重新赋 值。
int weight = 120;//体重 weight = 89;//不满意就赋值 double salary = 10000.0; salary = 20000.0;//使用赋值操作符赋值。赋值操作符可以连续使用,比如: int a = 10; int x = 0; int y = 20; a = x = y+1;//连续赋值 这样的代码感觉怎么样? 那同样的语义,你看看: x = y+1; a = x; 这样的写法是不是更加清晰爽朗而且易于调试。
复合赋值符:
+= -= *= /= %= >>= <<= &= |= ^=
这些运算符都可以写成复合的效果。 比如:
6.单目操作符
6.1 单目操作符介绍
赋值操作符可以连续使用,比如: int a = 10; int x = 0; int y = 20; a = x = y+1;//连续赋值 这样的代码感觉怎么样? 那同样的语义,你看看: x = y+1; a = x; 这样的写法是不是更加清晰爽朗而且易于调试。 int x = 10; x = x+10; x += 10;//复合赋值 //其他运算符一样的道理。这样写更加简洁。 ! 逻辑反操作 - 负值 + 正值 & 取地址 sizeof 操作数的类型长度(以字节为单位) ~ 对一个数的二进制按位取反 -- 前置、后置-- ++ 前置、后置++ * 间接访问操作符(解引用操作符) (类型) 强制类型转换
演示代码:
#include <stdio.h> int main() {int a = -10;int *p = NULL;printf("%d\n", !2);printf("%d\n", !0);a = -a;p = &a;printf("%d\n", sizeof(a));printf("%d\n", sizeof(int));printf("%d\n", sizeof a);//这样写行不行?printf("%d\n", sizeof int);//这样写行不行?return 0; }
——Since 新晓-故知
C语言学习笔记—P13(操作符详解<1>+图解+题例)相关推荐
- C语言学习19:操作符详解
目录 1.操作符种类 1.1 算术操作符 1.2 移位操作符 1.3 位操作符 1.4 赋值操作符 1.5 单目操作符 1.6 关系操作符 1.7 逻辑操作符 1.8 条件操作符 1.9 逗号表达式 ...
- 【C语言学习笔记】万字详解C循环
循环语句 文章目录 循环语句 0x00 什么是语句 0x01 循环语句 1.while循环 2.do...while循环 3.for循环 3.1 for循环简介 3.2 for循环变种 4.跳出循环 ...
- ELK学习笔记之Logstash详解
0x00 Logstash概述 官方介绍:Logstash is an open source data collection engine with real-time pipelining cap ...
- Java中大数据数组,Java基础学习笔记之数组详解
摘要:这篇Java开发技术栏目下的"Java基础学习笔记之数组详解",介绍的技术点是"java基础学习笔记.基础学习笔记.Java基础.数组详解.学习笔记.Java&qu ...
- expect学习笔记及实例详解【转】
1. expect是基于tcl演变而来的,所以很多语法和tcl类似,基本的语法如下所示: 1.1 首行加上/usr/bin/expect 1.2 spawn: 后面加上需要执行的shell命令,比如说 ...
- oracle scn 重置,学习笔记:Oracle SCN详解 SCN与Oracle数据库恢复的关系
天萃荷净 分享一篇关于Oracle SCN的详解,介绍SCN与Oracle数据库恢复的关系和SCN在数据库中的作用 一.为什么需要System checkpoint SCN号与Datafile Che ...
- PyQt5学习笔记——一文详解QObject
QObject详解笔记1 一.简介 QObject是所有Qt对象的基类 二.功能作用 2.1 对象名称.属性 2.1.1 API setObjectName("唯一名称") 给QT ...
- shell入门学习笔记-12-命令详解: echo与printf
系列目录与参考文献传送门: shell入门学习笔记-序章 命令详解 admindeMacBook-Pro:myshell admin$ type cd cd is a shell builtin ad ...
- CoAP学习笔记——CoAP格式详解
0 前言 CoAP是受限制的应用协议(Constrained Application Protocol)的代名词.在当前由PC机组成的世界,信息交换是通过TCP和应用层协议HTTP实现的.但是对于小型 ...
最新文章
- ajax学生校验学号,ajax校验数据库数据是否存在
- 前端工程化系列好文摘要
- Java:ThreadPoolExecutor解析
- (转)网络流-最大流 SAP算法(模板)
- 20100921 学习记录:关于sqlserver2005与ASP中 转换日期格式
- 25+ 个单色背景的网页设计实例
- 【算法】剑指 Offer 50. 第一个只出现一次的字符
- Flutter之SnackBar原理详解
- xp怎么设置计算机共享的打印机共享的打印机共享,XP设置打印机局域网共享的解决方法步骤...
- SATA学习笔记 1 --- ATA、IDE、ATAPI、SCSI、SATA、SAS等概念澄清
- 添加打印机无法搜索计算机,添加打印机时搜索不到如何解决 电脑搜不到打印机设备的处理办法...
- AWS的十条军规: 过去十年的经验总结
- 用python如何制作表格_Python中如何用xlwt制作表格
- 盛大是中国互联网最耀眼的流星
- moses中的数据预处理预处理操作
- 帧内预测——initAdiPattern
- Java导出多个excel并压缩下载
- android 本地图片模糊,Android端图片模糊的实现原理及方案
- 手游挂机工作室 - 二三点科普
- 定点数运算c语言程序,c语言 fixed-point 定点数 运算
热门文章
- 发现一只野生无知的小宾
- EP06-局域网和广域网通信原理
- 3吨电动葫芦毕业设计(论文+CAD图纸)
- 2021重庆高考成绩分数线查询,2021重庆高考分数线预测 重庆高考历年分数线一览表...
- 代码实现 Human-level control through deep reinforcement learning
- 最大熵模型学习优化案例
- usrp烧写固件支持gnuradio/labview
- 【C++OJ_静态与友元】电视机与遥控器(友元类)
- 当代大学生十大遗憾排行榜,最后一条90%的人都中枪!
- ios navigationBar 设置透明