目录
一、认识C语言
C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好,可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言。所以说,学习C语言基础知识是进入编程世界的必修课!
C语言的一些特点:
- 语言简洁、紧凑,使用方便、灵活。
- 运算符丰富。
- 数据类型丰富。
- 具有结构化的控制语句(如 if - else语句、while语句、do - while语句、switch语句和 for语句)。
- 语法限制不太严格,程序设计自由度大。
- C语言允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。
- 用C语言编写的程序可移植性好。
- 生成目标代码质量高,程序执行效率高。
二、最简单的C语言程序
#include <stdio.h> //头文件
int main() //C程序就是执行主函数里的代码,这个主函数就是C语言中的唯一入口。
{
printf("请输入一个正整数:\n"); //printf()是格式输出函数,在屏幕上输出内容。
return 0; //return是函数的返回值。
}
三、认识C语言基本数据类型
C语言的基本数据类型分为 基本类型、构造类型、指针类型、空类型四大类。一共有 9个,分别是 int、char、float、double、short、void、long、signed、unsigned。前6个使用的次数较多,最后面2个需了解。
1、整型
int:基本整数型,用于存储整数,占4个字节。
short:短整型,占2个字节,存储方式与基本整形int相同。
long:长整型,占4个字节。
long long:双长整型,占8个字节,这种数据类型一般比较少用。
2、字符型
char:字符型,用于存储单个字符,占1个字节。
3、浮点型
float:单精度浮点型,占4个字节。
double:双精度浮点型,占8个字节。
4、空类型
void:代表任意类型,而不是空的意思。任意类型是指它的类型是未知的,还没指定的。
可以通过下面程序更直观了解。
#include<stdio.h> //头文件
#include<stdlib.h> //头文件
int main(){
printf(" char 占 %d个字节\n", sizeof(char));
printf(" void 占 %d个字节\n", sizeof(void));
printf(" short 占 %d个字节\n", sizeof(short));
printf(" int 占 %d个字节\n", sizeof(int));
printf(" float 占 %d个字节\n", sizeof(float));
printf(" long 占 %d个字节\n", sizeof(long));
printf(" double 占 %d个字节\n", sizeof(double));
printf(" signed 占 %d个字节\n", sizeof(signed));
printf(" unsigned 占 %d个字节\n", sizeof(unsigned));
// 112444844
return 0;
}
四、认识C语言基本运算符
1、算术运算符
"+" :加号,用于加法运算。
"-" :减号,用于减法运算。
"*" :乘号,用于乘法运算。
"/" :除号,用于除法运算。
"%" :取余号,用于取余数运算。
"++":自增运算符。
"--" :自减运算符。
自增运算符"++"的使用方法有两种:
1. 前缀自增运算符:++a,即先将变量a自增+1,然后再使用变量a。
2. 后缀自增运算符:a++,即先使用变量a,然后再将变量a自增+1。
#include <stdio.h>
int main() // 主函数的类型 ,所有程序的入口,有且只有一个
{
int a = 97; //给a赋值97
int b = 7;
int c = a%b; //求余
int d = a/b; //求商
int e = a*b; //求积
printf(" %d\n %d\n %d\n",c,d,e); //输出c、d、e的值
return 0;
}
2、关系运算符
关系运算符返回的值是一个布尔值,即1为真,0为假。
">" : 大于运算符,例如a > b。
"<" : 小于运算符,例如a < b。
">=" : 大于等于运算符,例如a >= b。
"<=" : 小于等于运算符,例如a <= b。
"==" : 等于运算符,例如a == b。
"!=" : 不等于运算符,例如a != b。
#include <stdio.h>
int main() // 主函数的类型 ,所有程序的入口,有且只有一个
{
int a = 5, b = 10; //给a、b赋值
if (a > b) {
printf("a > b");
}
else {
printf("a <= b");
}
return 0;
}
3、逻辑运算符
C语言中常见的逻辑运算符有三种:"&&"、"||"、"!"。返回一个逻辑值Ture或False。
"&&":逻辑与运算符,真真为真,否则为假。
"||" :逻辑或运算符,有真为真,否则为假。
"!" :逻辑非运算符,原真为假,原假为真。
#include <stdio.h>
int main() // 主函数的类型 ,所有程序的入口,有且只有一个
{
int a = 10, b = 15, c = 20;
if (a > 0 && b < 20){ // &&:真真为真,否则为假。
printf("a和b均满足条件");
}
else {
printf("a和b至少有一个不满足条件");
}
if (a > 0 || c < 20){ // ||:有真为真,否则为假。
printf("a和c有至少一个满足条件");
else {
printf("a和c均不满足条件");
return 0;
}
4、三目运算符
格式: 表达式1 ? 表达式2 : 表达式3
表达式1 为条件表达式,如果结果为真,则返回表达式2 的值;否则,返回表达式3 的值。
#include<stdio.h>
int main()
{
int a = 0;
int b = 2;
printf("%d", a > b ? a : b);
return 0;
}
//需要理解
#include <stdio.h> //标准的输入输出
int main()
{
int a=10, b=8, c=6;
printf("a=%d,b=%d,c=%d\n", a, b, c);
c = a < b ? a++ : b++;
printf("a=%d,b=%d,c=%d\n", a, b, c);
return 0;
}
5、按位运算符
5.1 按位取反 (~)
按位取反 (~) ~ 运算符把 0变为 1,把 1变为 0
如下例子所示: ~ (0100 1001)=10110110,
假设val的类型是unsigned char,已被赋值为 2。
在二进制中,0000 0010表示2。那么,~val的值是 1111 1101,即 253。
注意:该运算符不会改变val的值,但是可以这样用:val=~val。或者直接声明一个新的变量newval=~val。
5.2 按位与 (&)
按位与 (&) & 运算符通过逐位比较产生一个新值。
如果把 1看为真,0看为假,运算规则可以记为同真则真,一假则假。
如下例子所示:(1001 0011) & (0011 1101)= (0001 0001)
5.3 按位或 (|)
按位或 (|) | 运算符通过逐位比较产生新值。
如果把 1看为真,0看为假,运算规则可以记为一真则真。
如下例子所示: (1001 0011) | (0011 1101)= (1011 1111)
5.4 按位异或 (^)
按位异或 (^) ^ 运算符通过逐位比较产生新值。
如果两个运算对象中只有一个为 1(但不是两个都为1),结果为 1。
如下例子所示: (1001 0011)^(0011 1101)= (1010 1110)
C语言有一个 按位异或 和 赋值运算 结合的运算符: ^=
5.5 左移运算符 (<<)
左移运算符 (<<)
<< 左移运算符是用来将一个数的各二进制位左移若干位,移动的位数由右操作数指定(右操作数必须是非负值)
右边空出的位用 0填补,高位左移溢出则舍弃该高位。
如下例子所示:若 a=15,即二进制表达为 00001111, a<<2 左移2位得二进制表达为 00111100。
5.6 右移运算符(>>)
右移运算符(>>)
右移运算符是用来将一个数的各二进制位右移若干位,移动的位数由右操作数指定(右操作数必须是非负值)
移到右端的低位被舍弃。
对于无符号数: 右移时左边高位补 0。
对于有符号数: 如果原来符号位为 0(该数为正),则左边也是移入 0;
如果符号位原来为 1(即负数),则左边移入 0还是 1,要取决于所用的计算机系统。
移入 0的称为 "逻辑移位",即简单移位;移入1的称为"算术移位"。
算术移位:将对左边空出的部分用符号位填补
逻辑移位:对左边空出的部分用 0填补
如下例子所示:
int a = -10 (十进制)
负整数的三种表示方法各不相同:
源码 :直接将数值按照正负数的形式翻译成二进制就可以得到原码。
1000 0000 0000 0000 0000 0000 0000 1010 ->源码
反码 :将源码的符号位不变,其他位依次按位取反就可以得到反码。
1111 1111 1111 1111 1111 1111 1111 0101 ->反码
补码 :反码 + 1就得到补码。
1111 1111 1111 1111 1111 1111 1111 0110 ->补码
int a = 1725 (十进制)
a的值是八进制数 3275:
a:1001011111101101 (用二进制形式表示)
a>>1: 0100101111110110 (逻辑右移时)
a>>1: 1100101111110110 (算术右移时)
6、赋值运算符
运算符 描述
= 赋值运算符,把右边操作数的值赋给左边操作数。
+= 加并赋值运算符,把右边操作数加上左边操作数的结果赋值给左边的操作数。
-= 减并赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数。
*= 乘并赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数。
/= 乘并赋值运算符,把左边操作数乘以右边操作数的结果赋值给左边操作数。
%= 取余并赋值运算符,两个操作数取余然后赋值给左边操作数。
>>= 右移并复制运算符。
<<= 左移并赋值运算符。
&= 按位与并赋值运算符。
^= 按位异或并赋值运算符。
|= 按位或并赋值运算符。
如果觉得对你有帮助的话,能否留个免费的小心心