植物百科网
当前位置: 首页 农业百科

输出浮点数绝对值的代码(C代码实现整数补码和浮点数)

时间:2023-07-15 作者: 小编 阅读量: 4 栏目名: 农业百科

1补码及二进制输出负数如何用补码表示?将自然码的每一位取反码。如4个位的补码方案可以表示的数据范围:补码输出二进制位的代码:利用移位运算、与运算取最位的方法可以输出补码的每一个二进制位。上面浮点数的尾数就是0110010001根据这个标准,我们来尝试把一个十进制的浮点数转换为IEEE754标准表示。由于尾数部分是规格化表示的,最高位总是“1”,所以这是直接隐藏掉,同时也节省了1个位出来存储小数,提高精度。

输出浮点数绝对值的代码?我们知道,计算机的都是用二进制的开关电路实现的整数、浮点数、字符串在计算机中的实现都有相应的编码方案,如补码、IEEE574的浮点数表示法、ASCII字符编码方案(用整数表来编码字符),今天小编就来聊一聊关于输出浮点数绝对值的代码?接下来我们就一起去研究一下吧!

输出浮点数绝对值的代码

我们知道,计算机的都是用二进制的开关电路实现的。整数、浮点数、字符串在计算机中的实现都有相应的编码方案,如补码、IEEE574的浮点数表示法、ASCII字符编码方案(用整数表来编码字符)。

1 补码及二进制输出

负数如何用补码表示?

先表示为自然码(原码)。

将自然码的每一位取反码。

在最低位加“1”。

如4个位的补码方案可以表示的数据范围:

补码输出二进制位的代码:

利用移位运算、与运算取最位的方法可以输出补码的每一个二进制位。

#include <iostream>using namespace std;void main(){while(1){int n;cin>>n;//最好有边界检查int h=1;h=h<<31;//32位,最高位1,其它位是0for(int i=1;i<=32;i){if((n&h)==0)cout<<0;else cout<<1;n=n<<1; //左移一位,右位补0if(i%4==0)cout<<" ";}cout<<endl;} system("pause");}/*430000 0000 0000 0000 0000 0000 0010 1011-431111 1111 1111 1111 1111 1111 1101 0101*/

2 浮点数的IEEE574表示法

现代计算机中,一般都以IEEE 754标准存储浮点数,这个标准的在内存中存储的形式为:

对于不同长度的浮点数,阶码与小数位分配的数量不一样,如对于32位的单精度浮点数,数符分配是1位,阶码分配了8位,尾数分配了是23位:

符号位:0表示正;1表示负;

偏移阶码e:e=指数的实际值 127。

如有一个浮点数10110010.001,则指数是7,阶码就要用7 127的二进制数表示,也就是:111 01111111 = 10000110 =134

尾数使用原码表示,绝对值在1与2之间,其中1和小数点都是隐含的,并不直接表示。

上面浮点数的尾数就是0110010001

根据这个标准,我们来尝试把一个十进制的浮点数转换为IEEE754标准表示。

例如:178.125

先把浮点数分别把整数部分和小数部分转换成2进制:

整数部分用除2取余的方法,求得:10110010

小数部分用乘2取整的方法,求得:001

合起来即是:10110010.001

转换成二进制的浮点数,即把小数点移动到整数位只有1,即为:1.0110010001 * 2^111,111是二进制,由于左移了7位,所以是111

把浮点数转换二进制后,这里基本已经可以得出对应3部分的值了:

数符:由于浮点数是正数,故为0(负数为1)。

阶码 : 阶码的计算公式:阶数偏移量, 阶码是需要作移码运算,在转换出来的二进制数里,阶数是111(十进制为7),对于单精度的浮点数,偏移值为01111111(127)[偏移量的计算是:2^(e-1)-1, e为阶码的位数,即为8,因此偏移值是127],即:111 01111111 = 10000110=134(10进制)

尾数:小数点后面的数,即0110010001

最终根据位置填到对位的位置上:

可能有个疑问:小数点前面的1去哪里了?由于尾数部分是规格化表示的,最高位总是“1”,所以这是直接隐藏掉,同时也节省了1个位出来存储小数,提高精度。

输出浮点数二进制位的代码:

利用共用体,不同类型共用一段内存空间,可以实现同样的一段0、1串可以不加改变地(不考虑类型转换规则)按不同的类型解释输出。如在共用体中存储一个float型和一个int型,如果先输入float的变量值,则可用int型按原样的比特串输出,如果先输入的是一个int型的变量值,则可用float型按原样的比特串输出。

#include <iostream>using namespace std;union {float input;int output;} data;void main(){data.input = 178.125;int h=1;h=h<<31;for(int i=1;i<=32;i){if((data.output&h)==0)cout<<0;else cout<<1;data.output<<=1;if(i%4==0)cout<<" ";}cout<<endl; system("pause");}//0100 0011 0011 0010 0010 0000 0000 0000

把上面的代码写到一起:

#include <iostream>using namespace std;union {float input;int output;} data;char flag;void printbin1(int val){int len=sizeof(val)*8;for(int i=1;i<=len;i){if(val&(1<<len-i))printf("1");elseprintf("0");if(i%4==0)printf(" ");}printf("\n");}void printbin2(int val){printf("浮点数:符号位 阶码(指数位数 127) 尾数位\n");printf("%2s"," ");printf("阶码");printf("%6s"," ");printf("尾数\n");int len=sizeof(val)*8;for(int i=1;i<=len;i){if(val&(1<<len-i))printf("1");elseprintf("0");if(i==1 || i==5 || i==9 || i==12)printf(" ");if(i>12)if(i%4==0)printf(" ");}printf("\n");}void main(){while(1){printf("\n输入i,int转换为二进制,如178,\n");printf("输入f,float转换为二进制,如178.125:\n");scanf("%c",&flag);if(flag=='i'){printf("请输入一个int:");int i;scanf("%d",&i);printbin1(i);}if(flag=='f'){printf("请输入一个float:");float f;scanf("%f",&f);data.input = f;printbin2(data.output);}cin.get();}}

运行效果:

输入i,int转换为二进制,如178,输入f,float转换为二进制,如178.125:i请输入一个int:10000 0000 0000 0000 0000 0000 0000 0001输入i,int转换为二进制,如178,输入f,float转换为二进制,如178.125:f请输入一个float:1浮点数:符号位 阶码(指数位数 127) 尾数位 阶码 尾数0 0111 1111 000 0000 0000 0000 0000 0000输入i,int转换为二进制,如178,输入f,float转换为二进制,如178.125:i请输入一个int:1780000 0000 0000 0000 0000 0000 1011 0010输入i,int转换为二进制,如178,输入f,float转换为二进制,如178.125:f请输入一个float:178.125浮点数:符号位 阶码(指数位数 127) 尾数位 阶码 尾数0 1000 0110 011 0010 0010 0000 0000 0000输入i,int转换为二进制,如178,输入f,float转换为二进制,如178.125:-End-

    推荐阅读
  • 突触名词解释(突触是什么意思)

    突触名词解释突触是指一个神经元的冲动传到另一个神经元或传到另一细胞间的相互接触的结构。突触是神经元之间在功能上发生联系的部位,也是信息传递的关键部位。在光学显微镜下,可以看到一个神经元的轴突末梢经过多次分支,最后每一小支的末端膨大呈杯状或球状,叫做突触小体。这些突触小体可以与多个神经元的细胞体或树突相接触,形成突触。从电子显微镜下观察,可以看到,这种突触是由突触前膜、突触间隙和突触后膜三部分构成。

  • 《守望先锋》对战局影响大招top一览 守望先锋对局战绩

    今天小编要为大家带来的是玩家“黑呦酱”分享的《守望先锋》对战局影响大招top一览,感兴趣的玩家赶紧一起来看看吧!守望先锋大招分为四类,控制类,自身BUFF类,辅助类以及伤害类,由于伤害类大部分使用大招时,本体无法进行有效杀伤,且控制类及自身BUFF类需要其他技能的配合,so,此间因素也要加入考量。

  • 运动后喝黑咖啡还能燃脂吗 运动时喝黑咖啡会加快燃脂吗?

    2、运动过程中身体脂肪会加速燃烧,从而具有一定减肥作用;而黑咖啡热量比较小,加上其中含有大量的咖啡因以及维生素、纤维素物质,适量喝可以促进人体肠胃蠕动,加速脂肪代谢分解,对减肥具有促进作用。

  • 斯威汽车质量怎么样(斯威质量好不好)

    2018年6月起,斯威“品质特工队”以四大火炉的重庆作为起点,途径海南、吐鲁番、格尔木三地,历时近一年进行了数十万公里极限环境适应性试验。极端干燥高温环境下,常见车内温度往往会狂飙到60℃以上,而在斯威G01的车厢里,却始终能够保持清新凉爽的状态。一整套严酷考验下来,斯威G01的性能表现完全得以充分认证。这样一算,斯威G01差不多完成了近百万公里的专业级严酷考验。

  • 春天兰花怎么养 春天兰花怎么养浇水

    白墨兰花哪个品种最好白墨兰花是墨兰的珍贵变异品种假鳞茎椭圆形,已有数百年栽培历史,流传至今,不下十数个品种,它叶色莹润、体态优雅、幽香静远、且抗病,白墨兰花比较好的品种一般分企剑和软剑两个品系。什么兰花开花最香兰花品种很多,按花香来排,在兰花界春兰居首,惠兰次之,随后便是建兰、墨兰和寒兰,春兰的花香味最正宗,持久性也极强。

  • 奔驰e300l前进挡总共有几个(你看了奔驰22款E300L升级这套原厂HUD抬头显示效果觉得怎么样)

    从行车安全的角度来考虑,加装一台HUD是非常有必要的。HUD的全称是HeadUpDisplay,中文翻译过来就是抬头显示器。今天星骏汇小陈通过以上的产品配件图了解,我们看到这台奔驰22款E300L升级HUD抬头显示所需要更换的配件有,抬显仪器,高配仪表盖板,高配仪表电脑,雨量传感器,空调管升级HUD抬头显示把仪表台上的那一块盖板换掉,换成高配的预留好显示器孔位的盖板,装上显示器,从而使仪表显示的内容投射到挡风玻璃上面。

  • 儿童葫芦丝表演(通城千人共奏葫芦丝)

    儿童葫芦丝表演香城都市报讯 10月27日,通城县隽水中学参加湖北省“黄鹤杯”美育节节目视频录制现场,七、八年级千名学生,同奏乐曲《龙的传人》。该校相关负责人介绍,本学期,每天下午预备铃响5分钟,七、八年级各班集体合奏葫芦丝。丝竹声声,已渐成校园一道靓丽的风景线。近年来,该校贯彻落实社会主义核心价值观,注重未成年人思想道德建设,坚持开设中华传统和特色民族特色教育课程,促进学生“德智体”全面发展。

  • 鸡娃时代孩子的成长之道(与其1岁就开始鸡娃)

    出生时大脑发育已经完成25%,1岁完成了50%,3岁完成了60%,6岁达到90%。现在小学虽然是零基础入学,取消了统一考试,但是它对学生的要求并没有降低。吃够了佛系养娃的亏,橙子家的老二断然不肯再佛系养了。北京卫视于2018年摄制的纪录片《起跑线》中,有一个7岁的北京女孩令人印象深刻。她的家庭,在北京三环内有一套房,一辆车。妈妈认为,孩子从小培养兴趣,靠的是父母的指引。

  • 环氧树脂的作用与用途(环氧树脂有什么作用与用途)

    环氧树脂的作用与用途具有优良的物理和电绝缘性能,强度高、收缩性低,耐腐蚀以及有高绝缘的优势,所以被称为万能胶。电器、电机绝缘封装件的浇注。从常压浇注、真空浇注已发展到自动压力凝胶成型。长时间接触胶水时,有人会有细微的皮肤过敏和细微瘙痒疼痛的情况,建议在运用时戴上防护手套,如果出现了这样的情况,需要用酒精擦洗,然后用清水冲洗干净。

  • 明月曾照江东寒剧情(明月曾照江东寒剧情介绍)

    明月曾照江东寒剧情剧情简介:美少女战清泓是武林副盟主战破敌之女,从小被父亲禁止涉及江湖事。十年一期的武林大会即将来临,战清泓瞒着家人偷跑下山,立志夺取武林盟主之位。战清泓与温宥也开始互生情愫,奈何最终被世俗礼法所阻碍。与此同时,江湖上风起云涌,战清泓发现自己自幼背诵的家训竟是人人趋之若鹜的第一神功《鹤羽剑法》。