三、初识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.rhkb.cn/news/380041.html

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

相关文章

阿里云 申请免费ssl 证书

1控制台--数字证书管理服务 2 创建所需域名证书

下载安装VSCode并添加插件作为仓颉编程入门编辑器

VSCode下载地址&#xff1a;下载 Visual Studio Code - Mac、Linux、Windows 插件下载&#xff1a;GitCode - 全球开发者的开源社区,开源代码托管平台 仓颉社区中下载解压 cangjie.vsix 插件 打开VSCode 按 Ctrl Shift X 弹出下图 按照上图步骤依次点击选中我们下…

openstack设置IP直接登录,不需要加dashboard后缀

openstack 实验环境&#xff0c;openstack-t版&#xff0c;centos2009 修改配置文件 [rootcontroller ~]# vim /WEBROOT /etc/openstack-dashboard/local_settings #将dashboard去掉 WEBROOT /dashboard/ #改为 WEBROOT /[rootcontroller ~]# vim /etc/httpd/conf.d/openst…

vscode搭建PyQt + Quick开发环境

VScode搭建PyQt Quick开发环境 目录 环境准备 &#x1f514;安装必要的Python包 &#x1f514;&#x1f50e; PyQt5和PySide2的区别&#x1f4be; 安装PyQt5&#x1f4be; 安装PySide2 配置VScode &#x1f514;&#x1f4bb; 安装扩展 代码示例 &#x1f514;✔ Python调用Qt…

分布式 I/O 系统Modbus TCP 耦合器BL200

BL200 耦合器是一个数据采集和控制系统&#xff0c;基于强大的 32 位微处理器设计&#xff0c;采用 Linux 操作系统&#xff0c;可以快速接入现场 PLC、SCADA 以及 ERP 系统&#xff0c; 内置逻辑控制、边缘计算应用&#xff0c;支持标准 Modbus TCP 服务器通讯&#xff0c;以太…

光耦合器技术的实际应用

光耦合器也称为光隔离器&#xff0c;是现代电子产品中的关键组件&#xff0c;可确保电路不同部分之间的信号完整性和隔离。它们使用光来传输电信号&#xff0c;提供电气隔离和抗噪性。 结构和功能 光耦合器通常由以下部分组成&#xff1a; 1.LED&#xff08;发光二极管&#…

pytorch学习(七)torchvision.datasets的使用

网络上已经有公开的数据集&#xff0c;并且这些数据集被整合到了torchvision.datasets中&#xff0c;使用自带的函数可以直接下载。 1.数据集 具体有哪些数据可直接用torchvision.datasets加载呢&#xff1f;可以查看这个网址&#xff1a; datasets官网&#xff1a;Datasets…

二叉树基础及实现(一)

目录&#xff1a; 一. 树的基本概念 二. 二叉树概念及特性 三. 二叉树的基本操作 一. 树的基本概念&#xff1a; 1 概念 &#xff1a; 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0 &#xff09;个有限结点组成一个具有层次关系的集合。 把它叫做树是因…

debian 更新源

前言 实现一键替换在线源 一键更新源 Debian 全球镜像站以下支持现有debian 11 12 echo "Delete the default source" rm -rf /etc/apt/sources.listecho "Build a new source" cat <<EOF>>/etc/apt/sources.list.d/debian.sources Types:…

将iPad 作为Windows电脑副屏的几种方法(二)

将iPad 作为Windows电脑副屏的几种方法&#xff08;二&#xff09; 1. 前言2. EV 扩展屏2.1 概述2.2 下载、安装、连接教程2.3 遇到的问题和解决方法2.3.1 平板连接不上电脑 3. Twomon SE3.1 概述3.2 下载安装教程 4. 多屏中心&#xff08;GlideX&#xff09;4.1 概述4.2 下载安…

pdf怎么压缩的小一点?PDF压缩变小的6种方法(2024全新)

pdf怎么压缩的小一点&#xff1f;首先&#xff0c;PDF文件可以进行压缩。职场文档传阅还是比较建议PDF压缩&#xff0c;PDF文件可以无障碍访问&#xff0c;保持原始文本、图像和表格&#xff0c;无需担心展示效果差异等等优势&#xff0c;成为我们日常工作中不可或缺的一部分。…

AGI 之 【Hugging Face】 的【零样本和少样本学习】之三 [无标注数据] 的简单整理

AGI 之 【Hugging Face】 的【零样本和少样本学习】之三 [无标注数据] 的简单整理 目录 AGI 之 【Hugging Face】 的【零样本和少样本学习】之三 [无标注数据] 的简单整理 一、简单介绍 二、零样本学习 (Zero-shot Learning) 和少样本学习 (Few-shot Learning) 1、零样本学…

MF173:将多个工作表转换成PDF文件

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

python多幅图自适应紧致二维排放

有时可视化会要同时放多幅图&#xff0c;如分割的原图、label、pseudo-label 和 prediction。当图很多&#xff0c;简单地排成一行可能会太长&#xff0c;不便观看。考虑将图排成二维网格&#xff08;grid&#xff09;展示&#xff0c;且为方便看&#xff0c;考虑让网格尽可能「…

word 设置多级混合标题自动更新

目录预览 一、问题描述二、原因分析三、解决方案四、参考链接 一、问题描述 有没有体会过多级标题&#xff0c;怎么设置都不听使唤的情况&#xff1f; 我想要的格式是&#xff1a; 二、原因分析 多级标题中发现&#xff0c;输入编号格式这里有个数字没有底纹,是了&#xff0…

【第4章】Spring Cloud之Nacos单机模式支持mysql

文章目录 前言一、初始化1. 初始化数据库2. 修改配置文件 二、效果1. 重新启动2. 新增用户 总结 前言 在0.7版本之前&#xff0c;在单机模式时nacos使用嵌入式数据库实现数据的存储&#xff0c;不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力&#xff0c;具…

PhantomJs将html生成img|pdf

PhantomJS PhantomJS是一个可编程的无头浏览器&#xff0c;‌它基于WebKit内核&#xff0c;‌通过JavaScript API进行脚本化操作&#xff0c;它对各种web标准有快速和原生化的支持&#xff0c;包括DOM处理、CSS选择器、JSON、Canvas和SVG。‌无头浏览器指的是一个完整的浏览器内…

顶着关税也要出海,蔚来如何找到未来?

“买得杏花&#xff0c;十载归来方始坼。” 十年的时间&#xff0c;足以见证每一个市场与品牌的白云苍狗、沧海桑田。 而2024年&#xff0c;也是蔚来成立的第十年。这十年里&#xff0c;中国的新能源车的渗透率从0.32%提高到了31.6%&#xff0c;蔚来从一家初创车企成长为如今…

设计模式——模版方法和策略模式

前言 作为一名资深CV工程师&#xff0c;学会为自己减少工作量乃重中之重。但只是一味地CV&#xff0c;只会因为劣质代码而让自己的工作量加倍&#xff0c;为了将来不被繁重的维护工作而打扰自己的休息日&#xff0c;为了更好的节能&#xff0c;学习设计模式&#xff0c;刻不容缓…

Filebeat k8s 部署(Deployment)采集 PVC 日志发送至 Kafka——日志处理(二)

文章目录 前言Filebeat Configmap 配置Filebeat Deployment验证总结 前言 在上篇文章中总结了 Django 日志控制台输出、文件写入按天拆分文件&#xff0c;自定义 Filter 增加 trace_id 以及过滤——日志处理&#xff08;一)&#xff0c;将日志以 JSON 格式写入日志文件。我们的…