位运算实现整数加减乘除运算——C语言描述
本文将从位运算的种类、原理、运用入手,详细介绍如何仅使用位运算实现整数的加减乘除运算,代码采用C语言实现。
1.位运算
我们知道,程序中的所有数据在计算机内存中都是以二进制的形式存放的,所谓的位运算就是直接对整数在内存中的二进制位进行操作。位运算是早期计算机的基础,正因如此,在计算机组成原理课程中我们经常会注意到位运算的存在。时至今日,不管是在C语言,还是在Java,或者其他语言,都会经常用到位运算。
具体说来,位运算一共有七种,分别是按位与、按位或、按位异或、按位取反、左移、带符号右移(算术右移)、无符号右移(逻辑右移)。
下表这些位运算的符号以及语言描述。
含义 | Pascal | C | Java |
---|---|---|---|
按位与 | a and b | a & b | a & b |
按位或 | a or b | a | b | a | b |
按位异或 | a xor b | a ^ b | a ^ b |
按位取反 | not a | ~a | ~a |
左移 | a shl b | a << b | a << b |
有符号数右移 | a shr b | a >> b | a >> b |
无符号数右移 | / | / | a >>> b |
2. 位运算实现加法
2.1 基本思路
使用位运算实现加法时,基本思路与计算机组成原理中的加法器类似,使用位运算a ^ b来实现没有进位的本位和,用a & b来获得需要进位的位置,则(a & b << 1)则表示进位加1后的数,再用或运算求本位和,直至(a & b) == 0即没有进位为止。
2.2 代码实现
int Add(int a, int b){
return b ? Add(a ^ b, (a & b) << 1) : a