三、初识C语言(3)

1.操作符

(1)算术操作符

+     -     *    /    %

                 商    余(取模)

小算法:

若a<b,则a%b = a

若a%b = c,则0 <= c <= b-1

若两个int 类型数相除,结果有小数会被舍弃。

保留小数:强制类型转换 *1.0

例:int a = 6;

       int b = 5;

printf("%f\n",a*1.0/b);

(2)移(二进制补码位)位操作符

>>右移

                根据数据类型,二进制补码整体移动,末尾补0。

<<左移

例:int a = 1;

       int b = a<<1;

则a = 1, b = 2

(3)位操作符

& 按位与        |  按位或            ^ 按位异或

例:int a = 3;//011

       int b = 5;//101

       int c = a&b;//001

则c = 1

(4)赋值操作符

==   +=  -=  *=  /=  &=  ^=  |=  >>=  <<=

赋值: =

判断相等:==

例:a += 10;相当于  a = a+10;

(5)单目操作符

1.逻辑反操作   !

C语言中,用0表示假,一切的非0表示真。

例:int a = 10;                int a = 0;

       则!a = 0                   则!a = 1

2.sizeof

计算变量/类型所占内存大小,以字节为单位。

3.按(二进制补码位)位取反 ~

数字在内存中都是以二进制补码的形式存储的,最高位为符号位,正数:0,负数:1。

原码          ——>            反码                 ——>             补码

             符号位不变,                           反码+1

               其余取反。        

正数的原码 = 反码 = 补码

负数要变换

例:int a = 0;

       int b = ~a;

则b = -1

a:0.......0   32个0

~a:1.....1    32个1(b的补码)-> 11111111.....0(b的反码)-> 100000....1(b的原码)

printf打印的是数字的原码

4.前置 -- ,后置--          前置++   后置 ++

例:前置 ++(先++,后使用)                后置++(先使用,后++)

        int a = 10;                                          int a = 10;

        int b = ++a;                                        int b = a++;

则a = 11,b = 11                                        则a = 11,b = 10

5.强制类型转换   (类型) 

例:int a = (int) 3.14;

       则a = 3

直接截取整数部分

(6)关系操作符

>  >=  <  <=   !=  ==

(7)逻辑操作符

&&  逻辑与                        || 逻辑或

例:int a = 3;

       int b = 5;

       int c = a&&b;

       则c = 1

(8)条件操作符(三目操作符)

exp1?exp2:exp3;

例:max = (a>b?a:b);

(9)逗号表达式

exp1,exp2,exp3,....,expN

逗号表达式最终值为最右边的值,并且逗号表达式优先级最低。

例:int a = (5,6);                a = (a = 3*5,a*4,a = a+5);

       则a = 6                        则a = 15+5 = 20

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//逗号表达式
int main()
{int x = 1;int y = 1;int z = 0;z = (x++,y++,++y);printf("第一个逗号表达式结果为:\n");printf("%d %d %d\n",x,y,z);//2 3 3x = 1;y = 1;z = (x++,y++,y++);printf("第二个逗号表达式结果为:\n");printf("%d %d %d\n",x,y,z);//2 3 2x = 1;y = 1;z = x++,y++,++y;printf("第三个逗号表达式结果为:\n");printf("%d %d %d\n",x,y,z);//2 3 1return 0;
}

(10)漏掉的操作符

下标引用:[ ]     

函数调用:()

结构体成员:.   ->

取地址符号:&

指针:*

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
//操作符
int main()
{	
//1.算术操作符int a = 5/2;int b = 5%2;//2.移(二进制位)位操作符int A = 1;int B = A<<1;//3.位(二进制位)操作符int x = 3;int y = 5; int z = x&y;//4.赋值操作符int i = 10;//5.单目操作符//(1)逻辑反操作int I = 10;//(2)sizeofint j = 1;//(3)按位取反操作int J = 0;//(4)前置/后置  ++/--int m = 10;int n = ++m;//(5)强制类型转换int q = (int)3.14;//6.关系操作符//7.逻辑操作符(逻辑值运算)int M = 3;int N = 5;int w = M&&N;//8.条件操作符(三目操作符)int s = 5;int o = 100;int max;max = (s>o?s:o);//9.逗号表达式:exp1,exp2,exp3,...,expN
//10.下标引用操作符 [],函数调用操作符 () ,结构体 . ->
//11.其它操作符 & *printf("1.算术操作符:\n");printf("商数和余数为:\n");printf("a=%d\n",a);printf("b=%d\n",b);printf("2.移位操作符:\n");printf("左移一位后为:\n");printf("A=%d\n",A);printf("B=%d\n",B);printf("3.位操作符:\n");printf("按位与后为:\n");printf("z=%d\n",z);printf("4.赋值操作符:\n");i+=20;printf("赋值操作后为:\n");printf("%d\n",i);printf("5.单目操作符:\n");printf("(1)逻辑反操作后为:\n");printf("%d\n",I);printf("%d\n",!I);printf("(2)sizeof操作后为:\n");printf("%d\n",sizeof(j));printf("(3)按位取反操作后为:\n");printf("%d\n",~J);printf("(4)后置++操作后为:\n");printf("m=%d\n",m);printf("n=%d\n",n);printf("(5)强制类型转换后为:\n");printf("%d\n",q);printf("%d\n",sizeof(q));printf("6.关系操作符\n");printf("7.逻辑与操作后为:\n");printf("%d\n",w);printf("8.条件操作后为:\n");printf("%d\n",max);printf("9.逗号表达式\n");printf("10.下标引用操作符 [],函数调用操作符 () ,结构体 . ->\n");printf("11.其它操作符 & *");return 0;
}

2.常见关键字

(1)寄存器变量 register

例:register int a = 10;//访问快

(2)有符号数 signed

int 定义的变量是有符号的,int = signed int

无符号数:unsigned int

(3)类型重定义 typedef

例:typedef unsigned int u_int;

        unsigned int num = 20;

                相当于

        u_int num = 20;

(4)static

                                        全局变量             ——>           静态的全局变量

                        变量

                                        局部变量              ——>          静态的局部变量

static修饰        

                        函数

1.局部变量

例:static int a = 1;

使局部变量的生命周期变长,可以保存上一次的值。

2.全局变量和函数

static修饰全局变量,使得extern失去作用效果。改变其作用域,使其只能在自己的所在源文件内部使用。

static修饰函数,使得extern失去作用效果。改变其链接属性,由外部的链接属性变为内部的链接,使其只能在自己的所在源文件内部使用。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
//static修饰局部变量
void test ()
{static int a = 1;a++;printf("a=%d\n",a);
}
int main()
{	int i = 0;while (i<5){test();i++;}return 0;
}

(5)#define定义常量和宏

1.#define定义标识符常量

例:#define MAX 100

2.#define定义宏(带参数)

例:#define MAX (x,y) (x>y?x:y)(无参数类型)  宏模块之间不能有空格

        调用:

      max =  MAX(a,b)

定义了一个MAX(x,y)的宏

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
//#define定义宏
#define MAX(x,y)(x>y?x:y)
int main()
{int a = 0;int b = 0;int c = 0;printf("a=");scanf("%d",&a);printf("b=");scanf("%d",&b);c = MAX(a,b);printf("最大值是:%d\n",c);return 0;
}

3.指针

(1)产生地址

用地址访问内存,如何产生地址?

例:

32位计算机,32根地址线/数据线(正/负),产生2^{32}个地址,0~2^{32}-1

每个地址用32个bit位 = 4byte表示,由计算机设计原理,1个内存单元的大小是1个byte。

所以32位系统最多只能支持4GB内存条

2^{32}/1024/1024/1024 = 42^{32}/1024/1024/1024

内存就是房间                             地址(指针)就是房间号

内存的大小就是房间的大小,地址的大小就是房间号的大小,地址的数量,就是房间的数量,就是内存的数量。

(2)指针变量

指针变量是用来存放地址的

例:int a = 10;

       int* p = &a;

int*是p的数据类型

p是指针变量

p里面存放的是a的地址,%p以地址类型打印。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
//指针变量
int main()
{int a = 10;int* p = &a;printf("a的地址是:%p\n",p);printf("a=%d\n",*p);*p = 20;printf("a=%d\n",*p);return 0;
}

(3)解引用操作 *

*p = 20;(通过对a的地址解引用来修改a的值)

地址:p    &a

内容:*p   a

(4)指针变量的大小

指针(地址)大小,在32位平台是4byte,32bit,在64位平台是8byte,64bit。

例:a为int型,占4个字节,占4个内存单元,所以占4个地址,但计算机制只读首地址,4个地址是连续的,而且地址是动态变化的。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
//指针变量的大小
int main()
{printf("%d\n",sizeof(char*));printf("%d\n",sizeof(short*));printf("%d\n",sizeof(int*));printf("%d\n",sizeof(double*));return 0;
}

4.VS  32转64

(1)Debug -> 配置管理器...

(2)活动解决方案 -> <新建...>

(3)选择x64

(4)win32  <->  x64  切换

5.思维导图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/46855.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode岛屿的最大面积(深度搜索)/什么是深搜,简单案例回顾图用邻接表实现图的深度优先遍历。

看这道题不懂深度搜索的可以看看下面讲述 岛屿的最大面积 解题思路 代码 class Solution {int dfs(vector<vector<int>>& grid, int cur_i, int cur_j) {//确定边界if((cur_i >0 && cur_i < grid.size()) && (cur_j >0 &&…

开机出现grub无法进入系统_电脑开机出现grub解决方法

最近有小伙伴问我电脑开机出现grub无法进入系统怎么回事&#xff1f;电脑开机出grub的情况有很多&#xff0c;电脑上安装了Linux和Win10双系统&#xff0c;但是由于格式化删除了Linux之后&#xff0c;结果win10开机了之后&#xff0c;直接显示grub&#xff1e;&#xff0c;无法…

MySQL事务管理(上)

MySQL注定会被多个用户或者客户端&#xff0c;因为MySQL存的是数据&#xff1b;MySQL内部使用的是多线程的方式来实现数据的存储工作&#xff1b; 前言 CURD不加控制&#xff0c;会有什么问题&#xff1f; 如今有个数据库里面是火车票售票系统所对应的数据库表&#xff1b;M…

.net6 core Worker Service项目,使用Exchange Web Services (EWS) 分页获取电子邮件收件箱列表,邮件信息字段

Program.cs 安装包&#xff1a;Microsoft.AspNetCore.Hosting.WindowsServices、Microsoft.Extensions.Hosting、Microsoft.Extensions.Hosting.WindowsServices、Microsoft.Extensions.Logging.Log4Net.AspNetCore 新建Configs/log4net.config using Com.Chinahorn.Exchange.W…

ubantu22.04安装OceanBase 数据库

1、管理员启动cmd,运行 sudo bash -c "$(curl -s https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/download-center/opensource/service/installer.sh)" 2、提示如下代表安装完成 3、修改数据库配置文件的密码 sudo vim /etc/oceanbase.cnf 然后保存退…

正则表达式(Ⅰ)——基本匹配

学习练习建议 正则表达式用途非常广泛&#xff0c;各种语言中都能见到它的身影&#xff08;js&#xff0c;java&#xff0c;mysql等&#xff09; 正则表达式可以快读校验/生成/替换符合要求的模式的字符串&#xff0c;而且语法通俗易懂&#xff0c;所以应用广泛 学习链接&am…

css前端面试题

1.什么是css盒子模型&#xff1f; 盒子模型包含了元素内容&#xff08;content&#xff09;、内边距&#xff08;padding&#xff09;、边框&#xff08;border&#xff09;、外边距&#xff08;margin&#xff09;几个要素。 标准盒子模型和IE盒子模型的区别在于其对元素的w…

C++模板进阶和模板链接错误的解决

小编在学习模板进阶之后&#xff0c;觉得模板的内容很有用&#xff0c;所以今天带给大家的内容是模板进阶的所有内容&#xff0c;内容包括模板的使用&#xff0c;模板的特化&#xff0c;模板的全特化&#xff0c;模板的偏特化&#xff0c;模板链接时候会出现的链接错误及解决方…

Ubuntu系统SSH免密连接Github配置方法

Ubuntu系统SSH免密连接Github配置方法 一、相关介绍1.1 Ubuntu简介1.2 Git简介1.3 Github简介 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本 四、Git本地环境配置工作4.1 安装Git工具4.2 创建项目目录4.3 …

STM32被拔网线 LWIP的TCP无法重连解决方案

目录 一、问题描述 二、项目构成 三、问题解决 1.问题代码 2.解决思路 3.核心代码&#xff1a; 四、完整代码 1.监测网口插入拔出任务 2.TCP任务 3.创建tcp任务 4.删除tcp任务 五、总结 一、问题描述 最近遇到一个问题&#xff0c;就是我的stm32设备作为tcp客户端…

AndroidStudio与手机进行无线调试

(一)、前提条件 一部手机一条USB数据线一部电脑手机和电脑连接到同一个 Wifi开启手机的USB调试功能开启手机的无线调试功能 (二)、操作步骤 1、 将手机和电脑用USB数据线连接 2、 打开 终端&#xff0c;输入 adb devices ,查看手机和电脑是否连接成功。如下图&#xff1a; 2、…

Linux驱动开发-06蜂鸣器和多组GPIO控制

一、控制蜂鸣器 1.1 控制原理 我们可以看到SNVS_TAMPER1是这个端口在控制着蜂鸣器,同时这是一个PNP型的三极管,在端口输出为低电平时,蜂鸣器响,在高电平时,蜂鸣器不响 1.2 在Linux中端口号的控制 gpiochipX:当前SoC所包含的GPIO控制器,我们知道I.MX6UL/I.MX6ULL一共包…

Atom - hackmyvm

简介 靶机名称&#xff1a;Atom 难度&#xff1a;简单 靶场地址&#xff1a;https://hackmyvm.eu/machines/machine.php?vmAtom 本地环境 虚拟机&#xff1a;vitual box 靶场IP&#xff08;Atom&#xff09;&#xff1a;192.168.56.101 跳板机IP(windows 11)&#xff1…

多显示器,如何快速切换电脑显示模式!

​一般在使用多显示器的情况下,可能我们要根据不同的工作需求来动态调整相适应的Windows显示模式,像扩展模式、复制模式、单显示器等模式。调整相应的模式方法也不止一种,下面一起了解下不同的方法如何快速操作实现! 快捷键法(WIN+P) 同时按下键盘徽标键WIN+P,会弹出个选…

微软发布iOS/安卓正式版Designer应用,AI修图功能助力创意设计

一、Microsoft Designer应用正式上线 AITOP100平台获悉&#xff0c;微软一直致力于为用户提供优质的创意工具&#xff0c;此次推出的Microsoft Designer应用正是其在移动端的重要布局。这款应用已正式上线iOS、Android、Windows和网页版本&#xff0c;满足不同用户的需求。微软…

高性能系统架构设计之:多级缓存

前言 为了提高系统的性能&#xff0c;一般会引入“缓存机制”&#xff0c;将部分热点数据存入缓存中&#xff0c;用空间换取时间&#xff0c;以达到快速响应的目的。 其实&#xff0c;缓存的应用远远不止存在于服务层&#xff08;传统的Redis缓存&#xff09;&#xff0c;从客户…

虚拟试衣人像合成新SOTA!IMAGDressing-v1:ControlNet和IP-Adapter的最佳拍档

文章链接&#xff1a;https://arxiv.org/pdf/2407.12705 github链接&#xff1a;https://imagdressing.github.io/ Demo试用&#xff1a;https://sf.dictdoc.site/ 亮点直击 为商家引入了一项新的虚拟试衣&#xff08;VD&#xff09;任务&#xff0c;并设计了一个综合亲和力测量…

最新缺失msvcp140.dll的多种解决方法,有效解决电脑dll问题

msvcp140.dll 是一个关键的动态链接库&#xff08;DLL&#xff09;文件&#xff0c;属于 Microsoft Visual C 2015 Redistributable 的一部分。它为使用 Microsoft Visual C 编译的应用程序提供了运行时支持&#xff0c;确保这些应用程序能够正常运行。以下是对 msvcp140.dll 的…

《0基础》学习Python——第十九讲__爬虫\<2>

一、用get请求爬取一般网页 首先由上节课我们可以找到URL、请求方式、User-Agent以及content-type 即&#xff1a;在所在浏览器页面按下F12键&#xff0c;之后点击网路-刷新&#xff0c;找到第一条双击打开标头即可查看上述所有内容&#xff0c;将上述URL、User-Agent所对应的…

ABAP打印WORD的解决方案

客户要求按照固定格式输出到WORD模板中&#xff0c;目前OLE和DOI研究了均不太适合用于这种需求。 cl_docx_document类可以将WORD转化为XML文件&#xff0c;利用替换字符串方法将文档内容进行填充同 时不破坏WORD现有格式。 首先需要将WORD的单元格用各种预定义的字符进行填充…