三、基本类型
3.1 整型类型
- 有符号signed——short, int, long, long long
- 无符号unsigned——short, int, long, long long
(0表示整数 1表示负数)
基本整型int: 4个字节(默认) 短整型short int: 2 长整型long int: 4 双长整型long long int: 8
- 进制——十进制、八进制、十六进制、二进制
十进制
0~9 123.45=(1 * 10 ^ 2)+(2 * 10 ^ 1)+(3* 10 ^ 0)+(4* 10 ^ -1)+(5* 10 ^ -2)
10进制->2进制 1.基数相除,倒序取余 2.一直凑
10进制转8进制 (1.将其转换成2进制 2.从右向左,三三分组,左边不够的话补符号位)
10进制转16进制 (1.将其转换成2进制 2.从右向左,四四分组,左边不够的话补符号位)
其他进制转10进制 按权重展开相加
八进制
8进制转16进制 先变成2进制,再转16进制
十六进制
0~9,abcdef/ABCDEF(10、11、12、13、14、15) 0011 0100 1010 1111 1011 1110 1101 1010 34afbeda 1字节——8位——2个(十六进制)数字 按权展开求和: 123(16)=291(10)
进制转换
b=10十进制 b=012八进制 b=0xa十六进制
二进制
0~1 1011.1=(1 * 2 ^ 3)+(0 * 2 ^ 2)+(1* 2 ^ 1)+(1* 2 ^ 0)+(1* 2 ^ -1)=8+2+1+0.5=11.5 权重:128(7) 64(6) 32(5) 16(4) 8(3) 4(2) 2(1) 1(0) 整型: int~4 byte (1 byte字节=8bit位) bit位——二进制——0/1
3.2 浮点类型
- float
- double
- long double
单精度浮点型:float 4个字节 双精度浮点型:double 8个字节(默认) 复数浮点型
存储
单精度浮点值:
32位=1(符号)+8(指数)+23(尾数)
-
符号位(1个字节): 0正,1负 -
指数位(8个字节):unsigned char 0~ (127) ~255 实际指数+127 = 存储指数 指数取值范围:-127 ~ 127(2^指数)——38 -
尾数位(23个字节):有效值 存储的是1.后面的值,不足补0 尾数~精度(有效个数):6 ~ 7位 2^23——7-1=6位 例0~30 ——1位
例:对于:12.5二进制=1100.1 1100.1=1.1001*2^3 指数位:3(实际指数) -> 3+127 = 130(存储指数)=1000 0010 尾数位:1001+19个0 存储:0 10000010 10010000000000000000000 二进制:0100 0001 0100 1000 0000 0000 0000 0000 十六进制:4 1 4 8 0 0 0 0 真实地址:00004841
0x12345678 小端:低地址放低数据(PC、inter) 78 56 34 12 大端:低地址放高数据(手机ARM,网络) 12 34 56 78
双精度浮点值:
64位=1(符号)+11(指数)+52(尾数)
-
符号位(1个字节): 0正,1负 -
指数位(8个字节):unsigned char 0~ (1023) ~2047 实际指数+1023 = 存储指数 -
尾数位(23个字节):有效值 存储的是1.后面的值,不足补0 尾数~精度(有效个数):15 ~ 16位 2^52——16-1=15位
例:对于:12.75二进制=1100.11 1100.11=1.10011*2^3 指数位:3(实际指数) -> 3+1023 = 1026(存储指数)=100 0000 0010 尾数位:10011+48个0 存储:0 10000000010 10011000000000……0000000000
3.7777779 ~ (3.8) ~ 3.80000001
#include <stdio.h>
int main()
{
double a = 3.8
double b = a - (int)a;
b *= 10;
int c = (int)b;
printf("%d\n", c);
return 0;
}
#include <stdio.h>
int main()
{
const float EPSINON = 0.000001;
if ((x >= - EPSINON) && (x <=EPSINON))
return 0;
}
#include <stdio.h>
int main()
{
float a = (float)3.8;
float a = 3.8f
return 0;
}
3.3 字符类型
char(迷你整型值) 用类型符char定义字符变量 char c = ‘?’; 把“?”的ASCII代码63赋给变量c 即,char c = 63;
#include <stdio.h>
int main()
{
char a = 'b';
printf("%c, %d\n", a, a);
a = 100;
printf("%c, %d\n", a, a);
return 0;
}
#include <stdio.h>
int main()
{
char a = 128;
printf("%d\n", a);
return 0;
}
1个字节-8个位 能表示的数值可能性有2^8==256种 如果unsigned char(无符号)的范围是0~255 如果 char(默认有符号)的范围是-128 ~ 127
3.4 布尔类型
bool unsigned char
3.5 类型转换
- 隐式转换
- 显式转换
原码,反码,补码:
最高位当做符号位:0表示整数 1表示负数
无符号整数: 按权展开相加
有符号整数:
- 正数:10:0000 1010
原码 = 反码 = 补码 = 1010 - 负数:
1.将其绝对值按位取反,得到反码 2.对反码+1得到补码 10 : 0000 1010 ~10: 1111 0101 -10 : 1111 0110 -12 : 0000 1100—1111 0011—1111 0100 -13 : 0000 1101—1111 0010—1111 0011 127: 0111 1111=128-1=1000 0000-1 -128: 1000 0000—0111 1111—1000 0000 -1: 0000 0001—1111 1110—1111 1111 -1+1: 1111 1111+1—10000 0000—0000 0000
|