头文件的概念

这一篇文章里面的知识比较杂也比较乱,但是看一下还是用一定的作用(相当于提醒一点易错点吧)

引入头文件的原因

#include <stdio.h>是什么意思呢?
C语言开发者们编写了很多常用函数,并分门别类的放在了不同的文件,这些文件就称为头文件(header file)。每个头文件中都包含了若干个功能类似的函数,调用某个函数时,要引入对应的头文件,否则编译器找不到函数。
实际上,头文件往往只包含函数的说明,也就是告诉我们函数怎么用,而函数本身保存在其他文件中,在链接时才会找到。

对于初学者,可以暂时理解为头文件中包含了若干函数。引入头文件使用#include命令,并将文件名放在< >中,#include 和 < > 之间可以有空格,也可以没有。

数据的长度

这个还是比较重要

强类型语言和弱类型语言

除了C语言,Java、C++、C#等在定义变量时也必须指明数据类型,这样的编程语言称为强类型语言。而PHP、JavaScript等在定义变量时不必指明数据类型,编译系统会自动推演,这样的编程语言称为弱类型语言

格式控制符

%d称为格式控制符,它指明了以何种形式输出数据。格式控制符均以%开头,后跟其他字符。%d 表示以十进制形式输出一个整数。

printf的格式控制的完整格式:%-0m.n格式字符

下面对组成格式说明的各项加以说明:
①%:表示格式说明的起始符号,不可缺少。
②-:有-表示左对齐输出,如省略表示右对齐输出。
③0:有0表示指定空位填0,如省略表示指定空位不填。
④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。N指精度。用于说明输出的实型数的小数位数。为指定n时,隐含的精度为n=6位。
格式字符有d, s, c,f,lf等

不同整型的输出使用不同的格式控制符可以输出不同类型的整数,它们分别是:%hd用来输出 short int 类型;%d用来输出 int 类型;%ld用来输出 long int 类型。

占用内存理解:

让整数占用更少的内存可以在 int 前边加 short,让整数占用更多的内存可以在 int 前边加 long
也可以将 int 省略,只写 short 和 long

只有 short 的长度是确定的,是两个字节,而 int 和 long 的长度无法确定,在不同的环境下有不同的表现

实际情况也确实如此,C语言并没有严格规定 short、int、long 的长度,只做了宽泛的限制:short 至少占用 2 个字节。int 建议为一个机器字长。32 位环境下机器字长为 4 字节,64 位环境下机器字长为 8 字节。short 的长度不能大于 int,long 的长度不能小于 int。

sizeof 操作符

sizeof 操作符获取某个数据类型的长度可以使用 sizeof 操作符,
sizeof 用来获取某个数据类型或变量所占用的字节数,如果后面跟的是变量名称,那么可以省略( ),如果跟的是数据类型,就必须带上( )。需要注意的是,sizeof 是C语言中的操作符,不是函数,所以可以不带( )
通常可以利用它计算字符串的长度

二进制数、八进制数和十六进制数的表示
  1. 二进制二进制由 0 和 1 两个数字组成,使用时必须以0b或0B(不区分大小写)开头
    eg.
    int a = 0b101;
    int b = -0b110010;

  2. 八进制八进制由 0~7 八个数字组成,使用时必须以0开头(注意是数字 0,不是字母 o)
    int a = 015;
    int b = -0101;

  3. 十六进制十六进制由数字 09、字母 AF 或 a~f(不区分大小写)组成,使用时必须以0x或0X(不区分大小写)开头,

int a = 0X2A;
int b = -0XA0;

一般整数初始化的时候都是用十进制表示

输出的话比较重要,有时候可能比赛的题会出这种二进制数、八进制数和十六进制数的输出

正负号在内存中存储

符号也是数字的一部分,也要在内存中体现出来。符号只有正负两种情况,用1位(Bit)就足以表示;C语言规定,把内存的最高位作为符号位。
以 int 为例,它占用 32 位的内存,0~30 位表示数值,31 位表示正负号
在编程语言中,计数往往是从0开始,例如字符串 “abc123”,我们称第 0 个字符是 a,第 1 个字符是 b,第 5 个字符是 3

C语言规定,在符号位中,用 0 表示正数,用 1 表示负数。

源码,反码,补码
  1. 原码将一个整数转换成二进制形式,就是其原码。例如
    short a = 6;,a 的原码就是0000 0000 0000 0110;
    更改 a 的值a = -18;,此时 a 的原码就是1000 0000 0001 0010。
    通俗的理解,原码就是一个整数本来的二进制形式。

  2. 反码谈到反码,正数和负数要区别对待,因为它们的反码不一样。对于正数,它的反码就是其原码(原码和反码相同);负数的反码是将原码中除符号位以外的所有位(数值位)取反,也就是 0 变成 1,1 变成 0。

​ 例如short a = 6; a 的原码和反码都是0000 0000 0000 0110;
​ 更改 a 的值a = -18;此时 a 的反码是1111 1111 1110 1101。

  1. 补码正数和负数的补码也不一样,也要区别对待。对于正数,它的补码就是其原码(原码、反码、补码都相同);负数的补码是其反码加 1。

例如short a = 6;a 的原码、反码、补码都是0000 0000 0000 0110;
更改 a 的值a = -18;,此时 a 的补码是1111 1111 1110 1110。可以认为,补码是在反码的基础上打了一个补丁,进行了一下修正,所以叫“补码”。原码、反码、补码的概念只对负数有实际意义,对于正数,它们都一样。

在计算机内存中,整数一律采用补码的形式来存储。这意味着,当读取整数时还要采用逆向的转换,也就是将补码转换为原码。将补码转换为原码也很简单:先减去 1,再将数值位取反即可。

其他注意点

main 是程序的入口函数,一个C程序必须有 main 函数,而且只能有一个。
一个程序当中可以使用return 返回值,也可以不使用return
使用return 程序运行正确一般返回 0。

puts 输出完成后会自动换行,而 printf 不会,要自己添加换行符,这是 puts 和 printf 在输出字符串时的一个区别

这里主要想说的时这一点,刚开始博主也是不清楚还可以这么输出

%e 以指数形式输出 float 类型,输出结果中的 e 小写;%E 以指数形式输出 float 类型,输出结果中的 E 大写;%le 以指数形式输出 double 类型,输出结果中的 e 小写;%lE 以指数形式输出 double 类型,输出结果中的 E 大写。

对代码的说明:%f 和 %lf 默认保留六位小数,不足六位以 0 补齐,超过六位按四舍五入截断