变量———在内存中的一块被命名的空间

int————整数类型变量

#include <stdio.h>
int main()
{
    int X; //向系统申请一块空间,用于存储整型值,用名称X映射到这块空间
           //如果没有在声明变量时给它赋值,则变量的值是不确定的
    return 0;
}

int这种类型用于存储整数,因此X被称为“整型变量”,它占用4个字节的内存空间,可以存放的数值介于-2147483648 至 2147483647 之间。

float————单精度型浮点数

如果你的程序中需要存储小数,则可以使用单精度型或双精度型,这两种类型都称为浮点数。和整型数一样,浮点数也是有范围的。单精度型浮点数的范围在$1\times10^{-37}$至$1\times10^{37}$之间,单精度型浮点数占用32个二进制位,精度支持到小数点后6位。

double————双精度型浮点数

double类型和float一样用于存储小数的,和float不一样的是他提供至少10位小数精度,比float更多。

注意,不要用中文,汉语拼音做变量名,尽量使用英文做变量名,英文更能直观的表达变量的涵义,能达到“见名知意”的效果。(我个人比较喜欢驼峰命名法,如果在公司,请根据公司编码规范进行命名)

溢出和精度问题

jdclz.png
在这里可以看到,如果超过了这种类型的数值范围,将会出现错误数值,代码第六行是比较明显的容易被发现的溢出,而第七行这种情况相对隐蔽,需要我们细心才能发现

cfzgj.png
为什么会出现这种情况,是由于系统会先对1/3进行运算,但是1和3都是整数型,所以计算出来的结果系统就会默认为整数型的,虽然1/3的结果为0.3333333333...,但是取为整数型后,小数点后面自动忽略,实际取值为0,再把0赋值给a,解决方案如下

#include <stdio.h>
int main()
{
    float a = 1/3.0; //表达式的结果类型,取表达式中所有元素的最高级别的数据类型
    printf("%f\n", a);

    return 0;
}

所以,谨慎的选择变量的数据类型,并在使用变量时是否会产生溢出和精度损失问题,是C语言程序员时刻要注意的!

进制转换

二进制(Binary)

在数学和数字电路中指以2为基数的记数系统,以2为基数代表系统是二进位制的,用两个不同的符号“0”和“1”来表示。

满二进一
二进制数第一位上的1  相当于十进制第一位上的1
二进制数第二位上的1  相当于十进制第一位上的2
二进制数第三位上的1  相当于十进制第一位上的4
二进制数第四位上的1  相当于十进制第一位上的8
二进制数第五位上的1  相当于十进制第一位上的16

以此类推 例如,二进制数10011用以下公式转换: $$1\times2^4+0\times2^3+0\times2^2+1\times2^1+1\times2^0=19$$
10011-2.png

八进制(Octal)

以8为基数的计数法,用数字0,1,2,3,4,5,6,7来表示,在编程语言中常常以数字0开始表明该数字是八进制。八进制的数和二进制数可以按位对应(八进制一位对应二进制三位),因此常应用在计算机语言中。

逢八进一
八进制数第一位上的1  相当于十进制第一位上的1
八进制数第二位上的1  相当于十进制第一位上的8
八进制数第三位上的1  相当于十进制第一位上的64
八进制数第四位上的1  相当于十进制第一位上的512

以此类推 例如,八进制数445用以下公式转换: $$4\times8^2+4\times8^1+5\times8^0=293$$
八进制转二进制
82jz.png
例如,八进制数745的二进制数为111 100 101
八进制数中的7对应二进制111,4对应二进制100,5对应二进制中的101
ps.再将八进制转化为二进制后,二进制中的0不能省略

十六进制(Hex)

以16为基数的计数法,用数字0,1,2,3,4,5,6,7,8,9,和字母A,B,C,D,E,F来表示,其中A,B,C,D,E,F代表10~15;C语言、C++、Shell、Python、Java语言及其他相近的语言使用字首“0x”,例如“0x5A4”。开头的“0”令解析器更易辨认数,而“x”则代表十六进制(就如“O”代表八进制)。在“0x”中的“x”可以大写或小写。对于字符量C语言中则以x+两位十六进制数的方式表示,如xFF。
逢十六进一
十六进制数0xD3C7转十进制公式: $$13\times16^3+3\times16^2+12\times16^1+7\times16^0=54215$$
十六进制转二进制
每个十六进制都对应4个二进制位.两个十六进制数刚好对应8位字节,如下图:
10162.png
十六进制数0xF2可转换成二进制数1111 0010,同理二进制数0101 1100可以转换成十六进制数:0x5C

最后修改:2023 年 10 月 13 日
如果觉得我的文章对你有用,请随意赞赏