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 ...
随机推荐
- MasaFramework -- 异常处理
前言 在程序设计中,我们会遇到各种各样的异常问题,一个异常处理不仅仅可以帮助开发者快速的定位问题,也可以给用户更好的使用体验,那么我们在AspNetCore项目中如何捕获以及处理异常呢? 而对应Asp ...
- 开源数字基础设施 项目 -- Speckle
[Speckle](https://speckle.systems/)是用于 3D 设计的任何东西的开源数字基础设施.处理软件孤岛.实时协作.数据管理.版本控制和自动化之间的互操作性.致力于构建一个开 ...
- IDEA快速生成数据库表的实体类
IDEA连接数据库 IDEA右边侧栏有个DataSource,可以通过这个来连接数据库,我们先成功连接数据库 点击进入后填写数据库进行连接,注意记得一定要去Test Connection 确保正常连接 ...
- 应用DriverManager类创建sqlserver数据库连接实例 JSP中使用数据库
JSP中使用数据库 1.JDBC介绍 java数据库连接(java Database Connectivity ,JDBC)是一种用于执行SQL语句的JavaAPI ,由一组使用java编程语言编写的 ...
- pta第二次博客
目录 pta第二次博客 1.前言 2.设计与分析 第四次作业第一题 第四次作业第一题 第四次作业第一题 第四次作业第一题 pta第二次博客 1.前言 2.设计与分析 第四次作业第一题 1.题目: &q ...
- Landau-Vishkin
基础算法 假设我们有两个字符串:,每个字符串由A C G T四个字母组成. 在两个字符串上,都有三种可能的编辑操作(突变): 删除某个字符 在某个位置插入字符 改变某个字符 每一个编辑操作都有惩罚值. ...
- shell脚本之一键部署openV~P~N
提前准备:/root目录下: checkpsw.sh ## 官方提供的自定义脚本,可在http://openvpn.se/files/other/checkpsw.sh下载 openvpn@.serv ...
- 最长不下降子序列(线段树优化dp)
最长不下降子序列 题目大意: 给定一个长度为 N 的整数序列:A\(_{1}\),A\(_{2}\),⋅⋅⋅,A\(_{N}\). 现在你有一次机会,将其中连续的 K 个数修改成任意一个相同值. 请你 ...
- Vue2 到 Vue3,重温这 5 个常用的 API
距离Vue3发布已经过去一年多时间了,从Vue2到Vue3是一个不小的升级,包括周边生态等.虽然目前大多数开发者们在使用的仍旧以Vue2为准,但Vue3显然是Vue开发者们未来必须面对的,而且前不久V ...
- Window使用PowerShell改文件时间戳
We cross infinity with every step; we meet eternity in every second. 我们每一步都跨过无穷,每一秒都遇见永恒. Window使用Po ...