计算机组成原理(原码、补码、反码)以及IEEE754 32位单精度浮点数标准表示十进制数过程

本文介绍了无符号整数的减法运算处理,涉及原码、补码和反码的概念,以及如何将减法转换为加法进行计算。此外,还详细讲解了[A]补与[-A]补的转换方法,并探讨了IEEE75432位单精度浮点数的标准表示过程。

 无符号整数的减法运算

原码、补码、反码的出现就是为了解决带符号整数的计算

1.原码

符号位0正1负

2.反码

3.原码与补码的快速转换

4.加法可以用原码直接加,减法侧需要转化为加法(一个数加上一个负数)减法转化成加法后对两个求补码后再做加法,符号位同样参与运算。(得到的是结果的补码)

5.[A]补  与   [-A]补   的转换

方法一:

方法二:从右往左第一个“1“的左侧全部按位取反(包括符号位)

6.IEEE754 32位单精度浮点数标准表示十进制数过程

在C语言中,要将一个32(通常以二进制形式存储)转换成各种表示法,包括原码反码补码、移码以及IEEE 754单精度浮点,需要按照特定规则进行计算。这里是一个简单的步骤概述: 1. **原码**:原码直接就是输入的32二进制,无须改变。 2. **反码**:对于正反码是去掉最高(符号,通常0代表正)后的二进制;对于负,先取反(除了符号),然后加一。例如,`-5`(原码1111 1111 1111 1111 0101)的反码是`1000 0000 0000 0000 1110`。 3. **补码**:与反码类似,但是对所有值都是一致的处理方式,即对所有字(包括正和负)的最高取反。正不变,负反码再加1。如上述例子,补码也是`1000 0000 0000 0000 1110`。 4. **移码**:与补码类似,移码是为了方便运算设计的一种特殊表示方式,一般只用于计算机系统内部。对于正,移码就是它的补码;对于负,移码是在其补码的基础上加一个偏置,通常是1(比如Intel架构)。 5. **IEEE 754 浮点**:32浮点由8符号、8和16组成。对于给定的十进制数,首先将其转换为二进制表示,然后确定适当的指,调整尾,并结合符号生成最终的浮点格式。 以下是一个简单的函示例,用于将32转换为IEEE 754单精度浮点(假设是32二进制表示): ```c #include <stdint.h> #include <stdio.h> // 假设输入是32有符号整型 int32_t to_float(int32_t raw) { int sign = raw >> 31; // 取符号 uint32_t man = raw & 0x7FFFFFFF; // 提取尾部分 uint32_t exp = 0; if (man == 0) { // 特殊值:+/-0 或 inf return sign << 31 | (0x7f << 23); // 格式化成 IEEE 754 } while (man & 0x800000) { // 调整指直到尾最低有效 man <<= 1; exp++; } man &= 0x007FFFFF; // 移除最高 // 格式化指(减去127) exp = exp - 127; return sign << 31 | ((exp + 127) << 23) | man; // 返回浮点 } void convert_to_ieee(float f) { int32_t raw = *(int32_t*)&f; printf("Original value: %d\n", raw); printf("IEEE 754 float: %.8f\n", f); } int main() { int32_t input; scanf("%d", &input); float float_value = to_float(input); convert_to_ieee(float_value); return 0; } ``` 请注意,这个程序只是一个简化版,实际的转换会更复杂,因为涉及到额外的错误检查和边界条件处理。同时,这个例子假设了输入是一个32有符号整,实际应用中可能需要根据实际情况调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值