微机原理—机器数两大类的运算与表示

目录

一、无符号数如何表示和运算

二、有符号数如何表示和运算

三、溢出与进位


一、无符号数如何表示和运算

主观原理:

        无符号数就是在整个机器字长中没有符号位,全是数值位,比如,在8位机中 字长为8位的就是:D7~D0;D0~D7都是数值位,是要参与运算的;那么在16位机中 D15~D0也全都是数值位,也是要参与运算的。

无符号数范围:

n位无符号数表示范围:0~({2}^n-1)

8位无符号数表示范围:0~255

16位无符号数表示范围:0~65535({2}^1^6-1

无符号数中的算术运算:

(1)无符号二进制加法

0+0=0,0+1=1,1+1=10(向高位在进一位)—缝二进一

例:计算二进制数10101010与01100010的和

(2)无符号二进制减法

 0-0=0,1-1=0,1-0=1,0-1=1(向高位借1)—借一当二

例:计算二进制数1010和0101的差

(3)还有无符号二进制乘法和无符号二进制除法;乘法的运算规则“由左移被乘数与加法运算构成”,除法的运算规则“由右移被除数与减法运算构成”。就不一 一举例了。

无符号数中的逻辑运算:

        逻辑运算分为“与运算、或运算、异或运算、非运算”。

(1)与运算

常用符号:“x”,“^”,"."

运算规则:两边运算的值都是1时结果才是1;否则为0

举例:

(2)或运算

常用符号:“+”,“V”

运算规则:两边运算的值只要有一个是1结果就为1,都是0的时候结果才是0。

举例:

(3)异或运算

常用符号:

 运算规则:两边运算的值相同结果为0,不同结果为1

举例:

(4)非运算

运算规则:取反,1为0,0为1。

举例:


 二、有符号数如何表示和运算

主观原理:

        在有符号数是有“真值”和“机器码”这个概念的,真值就是数据实际的值,即带有正负符号的数如:-3,+1011B,+127等,机器码是在计算机内用二进制编码来表示,机器码还涉及到了 原码、反码、补码、移码这些概念。当然,有符号数在机器字长中的表示也会有所不同,如在8位机上最高位即D7为符号位,其他均为数值位;同样的在16位机上最高位D15为符号位,其他均为数值位;符号位在机器码的原、反、补上表现的比较突出,0表示为正,1表示为负,而正因为符号位的改变,原、反、补也就有了差距。

 原码:

        符号位:0正,1负

        数值位:与真值的二进制形式一样

        表示范围:8位(-127~+127)(-({2}^7-1~+({2}^7-1)));16位(-32767~+32767)(-({2}^1^5-1~+({2}^1^5-1)));n位(-({2}^n^-1-1)~+({2}^n^-1-1))

        8位举例:

[+0]原=0000 0000——(D7为0===正)

[-0]原=1000 0000——(D7为1===负)

[+5]原=0000 0101——(5在八进制中是101,剩下的自动补0)

反码:

        符号位:0正,1负

        数值位:正数不变和原码一样,负数是将数值位取反。

        表示范围:和原码一样

        8位举例:

[+0]反=0000 0000

[-0]反=11111111

[+5]反=00000101

[-5]反=11111010

补码:

        符号位:0正,1负,参与运算

        数值位:正数不变,负数是在反码的基础上末位+1

        表示范围:8位:-128~+127;16位:-32768~+32767

        8位举例:

[+5]补=00000101

[-5]补=11111011


三、溢出与进位

主观原理:

        溢出是OF,OF主要表示在有符号数;进位是CF,CF主要表示在无符号数。

判定方法:

        CF:看最高位的运算结果有没有进位,如果进位CF=1,否则CF=0

        OF:在加法运算中,正数+正数=负数 或者 负数+负数=正数 OF=1,否则OF=0。在减法运算中,正数-负数=负数 或者 负数-正数=正数 OF=1,否则OF=0。

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我来帮你解决这个问题。 首先,选择排序是一种简单但低效的排序算法,它的基本思路是从数组中选择最小的元素,将其放置在数组的起始位置,然后再从剩余元素中选择最小的元素,放置在已排好序的元素的末尾,以此类推,直到所有元素都排好序为止。 下面是使用C语言实现10个数的选择排序的代码: ```c #include <stdio.h> void selectionSort(int arr[], int n); int main() { int arr[10] = {32, 12, 45, 67, 23, 9, 16, 78, 54, 21}; printf("Original array: "); for (int i = 0; i < 10; i++) { printf("%d ", arr[i]); } selectionSort(arr, 10); printf("\nSorted array: "); for (int i = 0; i < 10; i++) { printf("%d ", arr[i]); } return 0; } void selectionSort(int arr[], int n) { int i, j, minIndex, tmp; for (i = 0; i < n - 1; i++) { minIndex = i; for (j = i + 1; j < n; j++) { if (arr[j] < arr[minIndex]) { minIndex = j; } } if (minIndex != i) { tmp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = tmp; } } } ``` 代码的实现很简单,我们首先定义了一个 `selectionSort` 函数,这个函数接收一个整型数组和数组的长度作为参数,然后进行选择排序操作。选择排序的过程中,我们使用两层循环遍历数组,外层循环从 0 开始,每次循环选出一个最小值,内层循环从外层循环的下一个位置开始,每次循环比较当前值和已选出的最小值的大小,如果当前值更小,则更新最小值的下标。内层循环结束后,我们将最小值和外层循环的位置进行交换,然后继续进行下一轮循环,直到数组排好序为止。 在主函数中,我们定义了一个包含10个元素的数组,并初始化了数组的值。然后,我们输出原始数组,调用 `selectionSort` 函数进行排序,最后输出排好序的数组。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小黄爱吃辣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值