位运算实现加减乘除运算 您所在的位置:网站首页 c语言实现计算机功能 位运算实现加减乘除运算

位运算实现加减乘除运算

2023-12-20 02:53| 来源: 网络整理| 查看: 265

位运算实现整数加减乘除运算——C语言描述

本文将从位运算的种类、原理、运用入手,详细介绍如何仅使用位运算实现整数的加减乘除运算,代码采用C语言实现。

1.位运算

我们知道,程序中的所有数据在计算机内存中都是以二进制的形式存放的,所谓的位运算就是直接对整数在内存中的二进制位进行操作。位运算是早期计算机的基础,正因如此,在计算机组成原理课程中我们经常会注意到位运算的存在。时至今日,不管是在C语言,还是在Java,或者其他语言,都会经常用到位运算。 具体说来,位运算一共有七种,分别是按位与、按位或、按位异或、按位取反、左移、带符号右移(算术右移)、无符号右移(逻辑右移)。 下表这些位运算的符号以及语言描述。

含义PascalCJava按位与a and ba & ba & b按位或a or ba | ba | b按位异或a xor ba ^ ba ^ b按位取反not a~a~a左移a shl ba ba >> b无符号数右移//a >>> b 2. 位运算实现加法 2.1 基本思路

使用位运算实现加法时,基本思路与计算机组成原理中的加法器类似,使用位运算a ^ b来实现没有进位的本位和,用a & b来获得需要进位的位置,则(a & b return Add(a, Add(~b, 1)); } 4. 位运算实现乘法 4.1 基本思路

一开始考虑到乘法其实是加法的延续,是一种累加运算,只要将被乘数进行乘数次相加即可,但这样的做法存在一个很明显的问题即当乘数很大时需要进行多次加法运算。下面介绍一种改进的乘法思路,这种思路由手作乘法的过程的方法而来。在进行手动乘法时,我们根据乘数的尾数是否为1来确定是否需要相加。即若乘数的尾数是1,那么就要加上被乘数,否则则不需要加上被乘数。在本次判断之后,我们需要将被乘数左移一位,乘数逻辑右移一位。整个过程在乘数为0时停止。 同时需要注意符号的问题,这里我们首先进行绝对值的运算,再通过a^b是否小于0判断符号的异同性。

4.2 代码实现 int Multiply(int a, int b){ int a1 = a > 0 ? a : Add(~a, 1); int b1 = b > 0 ? b : Add(~b, 1); int sum = 0; while(b1){ if(b1 & 0x1){ sum = Add(sum, a1); } a1 = a1 1; } if((a ^ b) cout quotient = Add(quotient, 1


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有