C语言知识点(基本语法篇)
基本语法
1、计算机中补码的意义
统一零的编码、将符号位与其他位统一处理、将减法运算转换成加法运算
2、c语言中有符号和无符号的区别
有符号:数据的最高位为符号位,0表示正数,1表示负数
无符号:数据的最高位不是符号位,而是数据的一部分
3、变量的声明与定义有啥区别
声明变量 是对变量的类型和名称进行说明,不为变量开辟空间
变量定义 是根据变量类型大小为变量分配空间 变量名代表空间内容
4、描述变量的命名规则
变量名由字⺟、数值、下划线组成,但不能以数值开头
5、#include<> 与#include ""的区别?
include<>到系统指定⽬录寻找头⽂件,#include ""先到项⽬所在⽬录寻找头⽂件,如果没有找再到系 统指定的⽬录下寻找头文件
6、内存的最⼩存储单位以及内存的最⼩计量单位分别是?
内存的最⼩存储单位为 ⼆进制位, 内存的最⼩计量单位 字节
7、描述gcc的编译过程
gcc编译过程分为4个阶段:预处理、编译、汇编、链接。 预处理:头⽂件包含、宏替换、条件编译、删除注释。 编译:主要进⾏词法、语法、语义分析等,检查⽆误后将预处理好的⽂件编译成汇编⽂件。 汇编:将汇编⽂件转换成 ⼆进制⽬标⽂件。 链接:将项⽬中的各个⼆进制⽂件+所需的库+启动代码链接成可执⾏⽂件。
8、谈谈数据在计算机中原码的概念
计算机原码就是数值本身的二进制表现形式,如果是无符号数,所有二进制位都是数据位。如果是有符号数,二进制的最高位为符号位(0表示正数,1表示负数),其他二进制位为数据为
9、谈谈数据在计算机中反码的概念
反码是从数据的原码得来。
如果是无符号数:数据的反码就是原码
如果是有符号数:
正数:数据的反码就是原码
负数:数据的反码就是符号位不变,其他位按位取反
10、谈谈数据在计算机中补码的概念
补码是从数据的反码得来。
如果是无符号数:数据的补码就是原码
如果是有符号数:
正数:数据的补码就是原码
负数:数据的补码就是反码+1
11、关键字struct和union的区别
关键字struct 代表的是结构体,结构体中的所有成员拥有独立的空间
关键字union代表的是共用体,共用体中的所有成员共享同一份空间
12、关键字signed和unsigned的区别
关键字signed描述符的是有符号数,如果想定义有符号变量 可以省略signed,系统默认是signed
关键字unsigned藐视的是无符号数,如果想定义无符号变量 必须加unsigned修饰
13、在32位平台char short int long float double各自的字节数
char类型为1字节
short类型为2字节
int类型为4字节
long类型为4字节
float类型为4字节
double类型为8字节
14、谈谈关键字register
关键字register修饰的变量为寄存器变量, cpu读取寄存器变量相较于内存的变量的书读快些。需要注意的如果register修饰变量只是建议该变量为寄存器变量,最终是不是是由编译器决定的
15、谈谈关键字static
static修饰的变量为静态变量,静态变量的生命周期是整个进程,存在于全局区(静态存储区)。
如果函数中存在静态变量,如果函数多次调用,静态变量只会初始化一次,这种特性也是普通局部变量说不具备的。函数结束静态变量不会释放,而函数中的普通局部变量会被理解释放。
如果想让函数内部的变量不会随着函数的结束而结束,可以选择static修饰该变量
16、谈谈关键字extern
关键字extern是声明变量或函数具备外部特性,也是说当前源文件只要使用extern声明变量或函数,就可以使用其他源文件中的变量(一般为全局变量)或函数
17、谈谈关键字sizeof
关键字sizeof是测量类型(基本类型、构造类型)的长度,比如int num;sizeo(num)的结果在32位平台为4字节,int arr[5];sizeof(arr)的结果在32位平台为20字节
18、谈谈你对变量初始化的理解
在定义变量的时候给变量赋值,这个动作叫做变量的初始化。如果局部变量不初始化内容随机(不确定),全局变量,静态变量不初始化内容为0
19、谈谈字符中的''和字符串中的""的作用
'a':单引号的作用是描述a为字符,除转义字符外,‘’只能作用一个字符,单引号还有作用就是取字符a的ASCII值
"abc":双引号的作为是描述"abc"为字符串,如果是字符串常量,编译器会自动在字符串末尾添加'\0'字符作为字符串的结束标记。双引号另一个作用就是取字符串首元素的地址
20、谈谈'\0'和'0'的区别
'\0'表示的是反斜杠0 它在计算机中存储的ASCII值是0
'0'表示的是字符0,它在计算机中存储的ASCII值是48
21、谈谈十进制123转成二进制,八进制,十六进制的结果
123的二进制结果为:0111 1011
123的八进制结果为:0173
123的十六进制结果为:0x7b
22、谈谈二进制数1100 0011转换成十进制、八进制、十六进制的结果
八进制结果为:0332
十进制结果为:195
十六进制结果为:0xda
23、谈谈十六进制0x123转换成八进制的结果
结果为:0443
24、谈谈计算机对数据的存储(原码,反码,补码)
负数在计算机中以补码的形式存储
非负数在计算机中以原码的方式存储
八进制数在计算机中以原码的方式存储
十六进制在计算机中以原码的方式存储
25、谈谈计算机对数据的读取(原码,反码,补码)
如果是对无符号进行取值:
不管是有符号提取(%d %hd %ld)还是无符号提取(%u %hu %lu %o %x)都是输出内存原样数据
如果是对有符号进行取值:
系统会去看内存的最高位,如果最高位为0 表明正数, (有符号或无符号输出)都是 内存原样 输出
系统会去看内存的最高位,如果最高位为1 表明负数, 无符号输出(%u %lu %hu %o %x)都是 内存原样 输出, 有符号输出(%d %hd %ld),将内存数据求补码(得到原码) 输出
26、谈谈c语言中自动类型转换的特点
不同类型数据之间进行混合运算时必然涉及到类型的转换问题。
自动类型转换:保证精度不丢失 将小的类型 转成 大类型。
1、无符号和有符号 参加运算 需要将有符号 转换成无符号
2、小类型和大类型参加运算 会将小类型转成从大类型
3、char和short类型 只要参加运算 都会将自己转换成int类型
27、谈谈逻辑运算符&&和||的理解
&&逻辑与:
A && B A为真 且 B为真 整个表达式结果才为真。
A && B A或B只要有一个为假 整个表达式结果才为假。
注意:逻辑与&&的短路特性:
如果A为假 整个表达式为假, 那么B的真假决定不了整个表达式的结果,所以不会再判断B的真假,就叫“短路特性”
||逻辑或:
A || B A和B只要有一个为真 整个表达式结果为真。
A || B A和B同时假 整个表达式结果为假。
注意逻辑或||的短路特性:
如果A为真 整个表达式为真, 那么B的真假决定不了整个表达式的结果,所以不会再判断B的真假,就叫“短路特性”
28、谈谈位运算符&、|、^的应用场景
&:一般用于将指定位清0
|:一般用于将指定位置1
^:一般用于将指定位翻转
29、谈谈你对逻辑右移和算术右移的区别
算术右移、逻辑右移 都是编译器决定。如果是正数算术右移,逻辑右移没有区别。如果是负数。
负数:右边丢弃 左边补0(逻辑右移)
负数:右边丢弃 左边补1(算术右移)