初识C语言——数据类型
一、数据类型
C语言当中的数据类型十分丰富,接着上篇文章对C语言当中的基本数据类型给大家做一个补充。
首先,大家得知道计算机当中的基本计算单位,一字节 = 8比特(一个比特位用来存储一个二进制位)。
基本类型
- 整型:分为短整型,整型,长整型。
- 实型:分为单精度实型,双精度实型。
- 字符型上一篇文章中已经做过介绍
1.整型
名称 | 字节数 |
---|---|
短整型(short) | 2 |
整型(int) | 4 |
长整型(long) | 4 |
无符号短整型(unsigned short) | 2 |
无符号整型(unsigned int) | 4 |
无符号长整形(unsigned long) | 4 |
*计算机以二进制形式储存整数。
2.原码、反码和补码
整数在计算机中通常有三种表示,即原码、补码、反码,按照运算规则,使用补码运算,可使符号位与数值部分一同参与运算,因此整数部的数值在内存中以补码的形式存放。
原码:最高位为符号位(0表示正数,1表示负数),其余各位代表数值本身的绝对值。
反码:正数的反码与原码一致;负数保持符号位为1,其它各位按位取反,即0变1,1变0
补码:正数的原码,反码,补码相同;负数的补码在反码的基础上+1(保持符号位为1)
下面为大家举例(以一个字节为例)
整数 | 原码 | 反码 | 补码 |
---|---|---|---|
+7 | 00000111 | 00000111 | 00000111 |
-7 | 10000111 | 11111000 | 11111001 |
+0 | 00000000 | 00000000 | 00000000 |
-0 | 10000000 | 111111111 | 00000000 |
二进制的转换
以 -7为例(当然还是以一字节为例)
实型
实型又称浮点数,例如1600.0又可写作1.6*1000,可见小数点是可以变动的,是不是形象生动呢!
类型 | 字节数 |
---|---|
单精度实型(float) | 4 |
双精度实型(double) | 8 |
常量——值常量和符号常量
值常量
1. 整型常量
常见的有十进制常量、八进制常量、十六进制常量
·十进制常量由0~9组成以及正负号,如12 -20 98;要明确指出的是长整型必须在数值后面加L或l,如120L,130l;无符号整型须在后面加U或u,如120U(并且负数后面不能加U或u,如-34U) 。
八进制数以0开头,由0~7构成。
十六进制由0x或0X开头,后跟0~9以及 a-f或A~F。
2. 实型常量——浮点数
简单来说就是
- 数值后面加f表示单精度浮点数,如1.6f;一般情况下默认双精度浮点数如1.6
- 科学计数法
如1.23e-7或1.23E-7表示0.000000123
小数点左侧有且仅有 一位非零数字,并且e后只能为整数部分
补充两个转义字符(\ddd与\xhh)
- \ddd:表示一位到三位八进制数所代表的字符;如\101代表65。``
- \xhh:以\x开头表示一位到两位16进制数所代表的字符;如\x41代表65。
#include <stdio.h>
int main()
{
printf("%c\n", '\101');
printf("%c\n", '\x41');
return 0;
}
可见运行结果,这两个转义字符所代表的数字对应的字符均为’A‘
3.符号常量(也就是我们可以利用标识符来自定义常量)
如:
# define PI 3.14
数据类型的长度
利用sizeof()关键字获取
#include <stdio.h>
int main()
{
printf("%d\n", sizeof(char));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(short));
printf("%d\n", sizeof(long));
printf("%d\n", sizeof(float));
printf("%d\n", sizeof(double));
return 0;
}
这里再着重强调一下sizeof()不会计算表达式,往往在代码编译的时候已经确定了类型如:
#include <stdio.h>
int main()
{
int a = 0;
int b;
printf("%d\n", sizeof(a = b + 5));
return 0;
}
就是说上述代码sizeof()不会对a = b + 5进行计算而是在编译的时候已经完成了对表达式的分析,确定了a的类型