C语言常用知识总结
在 C 语言中,常量是一种固定值的标识符,它的值在程序执行期间不会改变。
C 语言中有几种不同类型的常量:
字符常量:用单引号括起来的单个字符,例如 'A'、'b'、'1' 等。
字符串常量:用双引号括起来的字符序列,例如 "Hello"、"goodbye" 等。
整型常量:十进制、八进制或十六进制表示的常量,例如 123、0377、0xFF 等。
浮点型常量:十进制形式的常量,例如 3.14、6.022e23 等。
常量名是大小写敏感的,通常使用大写字母表示常量。例如:
#define PI 3.14159
#define MAX_LEN 100
C语言的运算符可以分为以下几类:
- 算术运算符:包括加(+)、减(-)、乘(*)、除(/)和取模(%)等。
- 关系运算符:包括大于(>)、小于(<)、等于(==)、不等于(!=)、大于等于(>=)和小于等于(<=)等。
- 逻辑运算符:包括逻辑与(&&)、逻辑或(||)和逻辑非(!)等。
- 赋值运算符:包括赋值(=)、加等于(+=)、减等于(-=)、乘等于(*=)、除等于(/=)和取模等于(%=)等。
- 位运算符:包括按位与(&)、按位或(|)、按位异或(^)、按位左移(<<)、按位右移(>>)和按位取反(~)等。
- 其他运算符:包括条件运算符(?:)、大小比较运算符(sizeof)和逗号运算符(,)等。
C语言中的逻辑运算符包括逻辑与、逻辑或和逻辑非。
逻辑与(&&):当且仅当两边的表达式都为真时,整个表达式才为真。
逻辑或(||):当两边的表达式有一边为真时,整个表达式就为真。
逻辑非(!):将原来的布尔值取反。
if ((a < b && b < c) || (!(d > e) && c < b))
{
// 当(a < b < c)或(!(d > e) && c < b)为真时执行
}
正数补码和负数补码
正数补码和负数补码是在计算机中用于表示整数的一种二进制表示方法。
在计算机中,正数补码和负数补码都使用补码的形式来表示整数。补码是由原码(即普通的二进制表示方法)转换而来的,它是在原码的基础上取反(即将每一位取反),然后再加 1。
例如,如果要将十进制数 5 转换为二进制补码,可以按照如下步骤进行:
将 5 转换为二进制,得到 101; 将 101 取反,得到 010; 将 010 加 1,得到 011,即 5 的二进制补码为 011。
对于负数补码,也是类似的,只不过要先将十进制负数转换为二进制原码,然后再转换为补码。
例如,如果要将十进制数 -5 转换为二进制补码,可以按照如下步骤进行:
将 -5 转换为二进制,得到 101; 将 101 取反,得到 010; 将 010 加 1,得到 011,即 -5 的二进制补码为 101。
标识符命名规则:
- 标识符由字母、数字、下划线组成,但必须以字母或下划线开头;
- 不能使用 C 语言的保留字(即关键字)作为标识符;
- 不能将大写字母和小写字母混合使用,但可以使用下划线;
- 不能以下划线结尾;
- 不能使用两个或以上的连续下划线;
- 不能使用多个下划线作为前缀或后缀。
示例:
• 合法标识符:my_var1、_a、b2、__a、a_b、a_b_c
• 不合法标识符:1a、1_a、a_、a__b、a__b__c、a_b
按位异或运算的运算规则如下:
0 ^ 0 = 0 0 ^ 1 = 1 1 ^ 0 = 1 1 ^ 1 = 0
例如,3 ^ 5 = 6,因为二进制表示中 3 的二进制位为 011,5 的二进制位为 101,按位异或后得到 110,即 6。
按位异或运算常用于对两个数进行比较,因为按位异或后相同的数位会得到 0,不同的数位会得到 1。例如,如果要比较两个数是否相同,可以使用按位异或运算,如果得到的结果为 0,则这两个数相同,否则不同。
按位取反运算的运算规则如下:
~0 = 1
~1 = 0
例如,~3 = -4,因为二进制表示中 3 的二进制位为 011,按位取反后得到 100,即 -4。
按位取反运算常用于计算补码。例如,负数的补码是将它的二进制表示中的每一位取反,然后将结果加 1。
三目运算符
三目运算符是一种简化版的条件运算符。它可以用来代替 if-else 语句。
三目运算符的语法如下:
result = condition ? value1 : value2v
如果 condition 为 true,则 result 的值为 value1;否则,result 的值为 value2。
例如,下面的代码使用了三目运算符:
int x = 10, y = 20;
int max = x > y ? x : y;
C 语言有几种基本的数据类型:
char
:字符型,占 1 个字节。int
:整型,占 4 个字节。float
:浮点型,占 4 个字节。double
:双精度浮点型,占 8 个字节。
还有一些附加的类型,包括 short
(短整型,占 2 个字节)、long
(长整型,占 8 个字节)和 long long
(长长整型,占 8 个字节)。
你可以在变量名之前使用关键字 signed
或 unsigned
来指定变量的符号,如 signed int
或 unsigned long
。默认情况下,整型变量是有符号的。
例如:
char ch = 'a';
int i = -100;
float f = 3.14159;
double d = 3.141592653589793;
signed int si = -100;
unsigned int ui = 100;
short s = -200;
long l = -10000;
long long ll = -10000000000;
常量
在 C 语言中,常量是一种固定值的标识符,它的值在程序执行期间不会改变。
C 语言中有几种不同类型的常量:
- 字符常量:用单引号括起来的单个字符,例如 'A'、'b'、'1' 等。
- 字符串常量:用双引号括起来的字符序列,例如 "Hello"、"goodbye" 等。
- 整型常量:十进制、八进制或十六进制表示的常量,例如 123、0377、0xFF 等。
- 浮点型常量:十进制形式的常量,例如 3.14、6.022e23 等。
- 标识常量 宏
在 C 语言中,可以使用 #define
预处理指令来定义常量,这称为标识常量。标识常量是在编译期间由预处理器替换成实际值的一种常量。
常量名是大小写敏感的,通常使用大写字母表示常量。例如:
#define PI 3.14159
#define MAX_LEN 100
宏也是使用 #define
预处理指令定义的,它是一种特殊的函数,在编译期间由预处理器替换成代码的一种工具。
#define SQUARE(x) ((x) * (x)) int x = SQUARE(5); // x 的值为 25
标识常量和宏的主要区别在于,标识常量只是简单的替换,而宏会将整个表达式替换成代码。
例如:
#define SQUARE(x) x * x int x = SQUARE(5 + 1); // x 的值为 12,而不是 36
变量
在 C 语言中,变量是程序中用于存储和操作数据的地方。变量必须先声明,然后才能使用。
声明变量的语法格式如下:
<data type> <variable name>;
其中,<data type>
是变量的类型(例如 int
、float
等),<variable name>
是变量的名称。
例如:
int x;
float f;
char c;
变量的内容空间首地址,会变成变量的首地址
在 C 语言中,每个变量都有一个内存地址,即变量在内存中的位置。可以使用 &
运算符来获取变量的内存地址。
例如:
#include <stdio.h> int main() {
int x = 10;
printf("x 的内存地址是 %p\n", &x);
return 0;
}
输出结果:
x 的内存地址是 0x7fff5d72d97c
注意,变量的内存地址只是变量在内存中的位置,并不是变量的值。如果要获取变量的值,需要使用变量的名称。
例如:
int x = 10;
int y = x; // y 的值为 10
变量的分类
C 语言中,变量可以分为几类:
- 全局变量:定义在函数外的变量,在整个程序的生命周期内都有效。全局变量的初始值为 0。
- 局部变量:定义在函数内的变量,仅在函数内部有效。局部变量的初始值不确定。
- 静态局部变量:定义在函数内的变量,使用
static
关键字修饰。静态局部变量只在函数第一次调用时初始化,之后每次调用函数时都会保留其上次的值。 - 参数:函数定义中声明的变量,用于接收函数调用时传入的参数。
例如:
#include <stdio.h> // 全局变量
int g_x = 10; void func() {
// 局部变量
int y = 20; // 静态局部变量
static int z = 30;
} int add(int x, int y) {
// 参数 x 和 y
return x + y;
} int main() {
// 全局变量
printf("g_x 的值是 %d\n", g_x); func(); // 函数调用,传入两个参数
int sum = add(10, 20);
printf("sum 的值是 %d\n", sum);
return 0;
}
还有一些附加的变量类型:
- 自动变量:定义在函数内部的变量,使用
auto
关键字修饰。自动变量在函数执行结束后自动释放,它是 C 语言中默认的变量类型。 - 注册变量:定义在函数内部的变量,使用
register
关键字修饰。注册变量存储在 CPU 的寄存器中,因此访问速度快,但是数量有限,通常用于循环变量。
例如:
#include <stdio.h> void func() {
// 自动变量
auto int x = 10; // 注册变量
register int y = 20;
} int main() {
func();
return 0;
}
注意,自动变量和注册变量都是局部变量,仅在函数内部有效。
还有一些附加的变量类型:
- 指针变量:存储一个内存地址的变量。指针变量可以用来存储一个变量的内存地址,并通过指针访问这个变量。
例如:
#include <stdio.h> int main() {
int x = 10;
int *p; // 定义指针变量 p
p = &x; // 存储 x 的内存地址
printf("x 的值是 %d\n", x);
printf("x 的内存地址是 %p\n", &x);
printf("p 的值是 %p\n", p);
printf("*p 的值是 %d\n", *p);
return 0;
}
输出结果:
x 的值是 10
x 的内存地址是 0x7fff5d72d97c
p 的值是 0x7fff5d72d97c
*p 的值是 10
C语言输入输出
在 C 语言中,可以使用标准库中的输入输出函数来完成输入输出操作。
例如,使用 printf()
函数进行输出:
#include <stdio.h> int main() {
printf("Hello, World!\n");
return 0;
}
使用 scanf()
函数进行输入:
#include <stdio.h> int main() {
int x;
printf("请输入一个整数:");
scanf("%d", &x);
printf("你输入的数是 %d\n", x);
return 0;
}
注意,在使用 scanf()
函数时,需要传入变量的内存地址,因为 scanf()
函数会直接修改变量的值。
C语言常用知识总结的更多相关文章
- C语言常用知识
跳出for循环主要有以下2中方式: 1.用break语句.如: int i; for(i=0; i<10; i++) { if(i>3) // 如果i>3,跳出for循 ...
- C语言-常用知识和技巧
1. char string[MAXSIZE], *tmp = string; 2."&&", "||", "?:", &q ...
- 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇一:WPF常用知识以及本项目设计总结
篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblog ...
- C语言基础知识-运算符与表达式
C语言基础知识-运算符与表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用运算符分类 1>.算术运算符 用于处理四则运算. 2>.赋值运算符 用于将表达式的 ...
- javascript常用知识汇总
javascript这个语言庞大而复杂,我用了三年多了,还是皮毛都不会.从刚开始的jquery,到后来的es6,每天都在学习,每天都在忘记. 1.禁止手机虚拟键盘弹出 在开发适配手机的页面时,出现了这 ...
- OC语言基础知识
OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...
- 李洪强iOS开发之OC语言基础知识
OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...
- C语言常用的库文件(头文件、函数库)
C语言常用的库文件(头文件.函数库) C系统提供了丰富的系统文件,称为库文件.C的库文件分为两类,一类是扩展名为".h"的文件,称为头文件,在前面的包含命令中我们已多次使用过.在& ...
- 01-C语言基本知识
目录: 一.C语言基本知识 二.C语言概述 回到顶部 一.C语言基本知识 1 语言背景 1946年,美国冯·诺依曼第一台计算机. 四大部分:中央处理器(控制器,运算器),存储器,输入设备,输出设备. ...
- javascript常用知识点集
javascript常用知识点集 目录结构 一.jquery源码中常见知识点 二.javascript中原型链常见的知识点 三.常用的方法集知识点 一.jquery源码中常见的知识点 1.string ...
随机推荐
- 华为交换机GVRP基础配置
GVRP基础配置 int G0/0/1 port link-type trunk 配置接口类型为trunk port trunk allow-pass vlan all 允许所有VLAN通过 int ...
- python-D3-语法入门1
Python语法注释 什么是注释 注释其实就是对一段代码的解释说明(注释是代码之母) 如何编写注释 方式1:解释说明文字前加警号 (pycharm中有快捷键ctrl+?) # 注释(单行注释) 方式2 ...
- Vue中引入echarts。
1.安装 在终端vue项目的文件夹下运行npm install echarts --save安装依赖 可以使用npm install echarts@("这里可以写版本号") -- ...
- 自己动手写线程池——向JDK线程池进发
自己动手写线程池--向JDK线程池进发 前言 在前面的文章自己动手写乞丐版线程池中,我们写了一个非常简单的线程池实现,这个只是一个非常简单的实现,在本篇文章当中我们将要实现一个和JDK内部实现的线程池 ...
- C++之值传递&指针传递&引用传递详解
C++之值传递&指针传递&引用传递详解 目录 C++之值传递&指针传递&引用传递详解 1.函数基础 2.值传递 3.指针传递 4.引用传递 1.函数基础 一个函数由以下 ...
- 知识图谱顶会论文(ACL-2022) CAKE:用于多视图KGC的可扩展常识感知框架
CAKE:用于多视图KGC的可扩展常识感知框架.pdf 论文地址:CAKE:Scalable Commonsense-Aware Framework For Multi-View Knowledge ...
- 畅联新增物联网设备接入协议:精华隆的NB一键报警
这个是有点时间了,这里记录一下! ----------------------------------------------------------------------------------- ...
- C#通过unsafe来操作指针
这里不介绍unsafe的理论,这里单单介绍它的用法.如果要了解的更具体,可以看这篇大神的博文:C#通过指针操作图像 先从一个很简单的例子介绍: private void TestInptr() { u ...
- SpringBoot怎么自定义一个Starter ?
小伙伴们曾经可能都经历过整天写着CURD的业务,都没写过一些组件相关的东西,这篇文章记录一下SpringBoot如何自定义一个Starter. 原理和理论就不用多说了,可以在网上找到很多关于该方面的资 ...
- golang内置包管理工具go mod简明教程
go mod go buildin package manager. go mod是go语言内置的包管理工具,集成在go tool中,安装好go就可以使用. 要求: go version >= ...