- 不同类型变量的范围
- float表示的数据范围为什么比long的范围要大
- printf()函数的使用
- 浮点数如何取余
- 参数和状态的区别
32位 *** 作系统,不同类型变量对应的字节数为:(红色的表示与64位系统不同之处)
类型 | 分类 | 字节数 | 范围 | 备注 |
---|---|---|---|---|
char | 字符型 | 1个 | 0~255 | |
char*(即指针变量) | 指针 | 4个 | / | |
short int | 短整型 | 2个 | -32768~32767 | |
unsigned short int | 短整型 | 2个 | 0~65535 | |
int | 整型 | 4个 | -2147483648 ~ +2147483647 | |
unsigned int | 无符号整型 | 4个 | 0 ~ 4294967295 | |
long | 长整形 | 4个 | -32768~32767 | |
unsigned long | 无符号长整形 | 8个 | 0 ~ 4294967295 | |
float | 浮点型 | 4个 | − 3.4 ∗ 1 0 38 — — 3.4 ∗ 1 0 38 −3.4∗10^{38}~——~3.4∗10^{38} −3.4∗1038 —— 3.4∗1038 | 十进制下,小数点后6~7位有效 |
double | 双精度浮点型 | 8个 | − 1.7 ∗ 1 0 308 — — 1.7 ∗ 1 0 308 −1.7∗10^{308}~——~1.7∗10^{308} −1.7∗10308 —— 1.7∗10308 | 十进制下,小数点后15~16位有效 |
- 详细说明
首先要把17.625换算成二进制:10001.101
整数部分,除以2,直到商为0,余数反转。
小数部分,乘以2,直到乘位0,进位顺序取。
在将10001.101右移,直到小数点前只剩1位:
1.0001101 * 2^4 因为右移动了四位
这个时候,我们的底数和指数就出来了
底数:因为小数点前必为1,所以IEEE规定只记录小数点后的就好。所以,此处的底数为:0001101
指数:实际为4,必须加上127(转出的时候,减去127),所以为131。也就是10000011 符号部分是整数,所以是0
综上所述,17.625在内存中的存储格式是: 01000001 10001101 00000000 00000000
printf()函数的使用
%d称为格式控制符,它指明了以何种形式输出数据。格式控制符均以%开头,后跟其他字符。
printf 支持更多的格式控制,例如:
int a=100;
int b=200;
int c=300;
printf("a=%d, b=%d, c=%d", a, b, c);//格式化输出
会在屏幕上显示:
a=100, b=200, c=300
- 在KEIL C51中遇到的浮点数取余问题,编译器将’%'提示为不识别的标记,原因为被 *** 作数为浮点数时,不能进行取余 *** 作;
实际使用中如果需要取浮点数的各个位数,应先将被 *** 作数显式强制转换为整形。
例如:
float a = 0;
a = a / 100;//取小数点前两位
a = (int)(100 * a) % 100;//取小数点后两位
参数和状态的区别
- 类比控制层与UI层,用控制层的API来举例
- 参数对象对控制层来说为输入,是由UI模块生成的,控制层不能修改参数对象里的参数
- 状态对象对控制层来说是输出,由控制层自己产生,UI层不能修改控制层状态的对象。
- 但是UI层可以通过调用API提供的命令接口来改变控制层状态的对象。
- 这个输入/输出仅指控制层和UI这两个模块,对于通过IO口直接读取状态的输入仍然是定义在状态对象里的。算是控制层的输出
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)