变量———在内存中的一块被命名的空间
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更多。
注意,不要用中文,汉语拼音做变量名,尽量使用英文做变量名,英文更能直观的表达变量的涵义,能达到“见名知意”的效果。(我个人比较喜欢驼峰命名法,如果在公司,请根据公司编码规范进行命名)
溢出和精度问题
在这里可以看到,如果超过了这种类型的数值范围,将会出现错误数值,代码第六行是比较明显的容易被发现的溢出,而第七行这种情况相对隐蔽,需要我们细心才能发现
为什么会出现这种情况,是由于系统会先对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$$
八进制(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$$
八进制转二进制
例如,八进制数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位字节,如下图:
十六进制数0xF2可转换成二进制数1111 0010,同理二进制数0101 1100可以转换成十六进制数:0x5C
版权属于:KrisWi
本文链接:https://blog.aqkx.com/index.php/archives/46/
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。