tdint.h跨平台整数,float类型的机器码(阶码)

来源:互联网 发布:mac safari视频插件 编辑:程序博客网 时间:2024/04/30 00:00
  • #include<stdont.h>的作用
#include<stdio.h>
#include<stdint.h>//stdint.h是支持跨平台的整数头文件 内置define定义各个平台的值支持在vs2013 lunix gcc中整数的值
  • float的误差
float精确到小数点后六位,输出时用%f
double精确到小数点后15位输出时用%lf
  • _Bool的用法
_Bool只在高级编辑器中才能使用
  • 阶数 浮点数的二进制
符号位,最高位也就是第30位,0为正数,1为负数
阶码。第三十位到第23位这8个 二进制表示该实数转化为规格化的二进制实数后的指数为127(127为偏移量)之和所谓阶码(因为避免太多的符号位,用正数来表示指数,阶码等于指数+127)
尾数,其他最低23位既第22位到第0位表示该实数转化为规格化的二进制实数
小数点以后得其余各位既所谓尾数
1<指数的底数<2 尾巴的整数可以省略
举例:
1.5 转换二进制为1.1
二进制位 1.1小球首位为1 所以不需要移位1*2∧0=1.5
0 011 1111 1000 0000 0000 0000 0000 0000
正数首位为0 ,移动位数为0,所以阶数不变,尾数为1 所以结果为127+0=127
0 011 1111 1100 0000 0000 0000 0000 0000
转化为16进制为
8 f c 0 0 0 0 0
-1.5转换二进制为1.1
二进制位 1.1小球首位为1 所以不需要移位1*2∧0=1.5
0 011 1111 1000 0000 0000 0000 0000 0000
负数首位为1,移动位数为0,所以阶数不变,尾数为1 所以结果为
1 011 1111 1100 0000 0000 0000 0000 0000
转化为16进制为
b f c 0 0 0 0 0
0.75转换为二进制为0.1
0 011 1111 1100 0000 0000 0000 0000 0000
首位不为1,需要移位1.1*2^-1
指数为负1,127+(-1)=126,阶码的和为126------(0111 1110)
0 011 1111 00100000 0000 0000 0000 0000
转换成十六进制为
3 f 2 0 0 0 0 0
12.5转换成二进制为1100.1
0 011 1111 1100 0000 0000 0000 0000 0000
格式不为1.***,需要移位转换格式
1100.1=1.1001*2^3 指数为3 阶码为127+3=130------(1000 0010)
0 100 0001 0100 1000 0000 0000 0000 0000
转换成十六进制为
4 1 4 8 0 0 0 0





代码组成
#include<stdio.h>
#include<stdint.h>//可以跨平台移植的整数头文件 long 64位 linux 8位 int 16位的情况下是2个字节. 32位.64位都是4个字节
#include<stdlib.h>
void main1()//可跨平台的整数
{
int8_t a;//定义为8位可跨平台整数a;
int b;
printf("%d",sizeof(a));//在八位的环境下整数占用的为1个字节
printf("\n%d", sizeof(b));//在32位的环境下为4个字节

getchar();



}
void main2()//字符数组ui
{
system("calc");//调用system函数打开计算器,在system中写入字符串
//定义一个数组
char str[10] = "calc";
system(str);//关闭刚才的计算器 出现这个计算器,system 可以直接填写字符数组.
printf("%s\n", str);//%s是输出数组,print的功能是将str写入双引号中的数组
printf(str);//也可以直接输出数组
getchar();


}

void main()//阶码(float实数类型二进制显示)
{
float b = 12.5;
printf("%x",&b);


getchar();




}




0 0
原创粉丝点击