C++不用任何算术运算符实现整数加法

这本是careerup的一道题,看到了以后自己做了一下,主要的难点就是加法里面的进位。直接上代码:

 1 int  add(int a, int b)
 2 {
 3     const int bitsize = sizeof(int) * 8;
 4     int digit[bitsize] = {0};
 5     int first = a, second = b;
 6     int carry =0;
 7     int result = 0;
 8     for (int i = 0; i < bitsize; i++)
 9     {
10
11         digit[i] = (first & 1) ^ (second & 1) ^ carry;
12
13         if (((first & 1) == 1 && (second & 1) == 1) || ((first & 1) == 1 && carry == 1) || (carry == 1 && (second & 1) == 1))
14             carry = 1;
15         else
16             carry = 0;
17
18         first = first >> 1;
19         second = second >> 1;
20
21         result = result | (digit[i] << i);
22     }
23     return result;
24
25 }

后来网上发现了一个更加简便的方法:

1 int add_no_arithm(int a, int b)
2 {
3     if (b == 0) return a;
4     int sum = a ^ b; // add without carrying
5     int carry = (a & b) << 1; // carry, but don’t add
6     return add_no_arithm(sum, carry); // recurse
7 }

真是巧妙啊,carry就是需要进位的地方。

时间: 2024-12-25 23:29:21

C++不用任何算术运算符实现整数加法的相关文章

算术运算符和表达式

C语言的运算符范围很宽,除了控制语句和输入输出以外的几乎所有的基本操作都作为运算符处理,下图是C运算符的分类 1  算术表达式 用算术运算符和括号将运算对象(也称操作数)连接起来的,符合语法规则的式子成为算术表达式.运算对象包括 常量 变量 函数. C语言规定了各种运算符的结合方向,这是C语言特点之一,是别的高级语言所没有的.算术运算符的结合方向为"自左至右"又称为"左结合性",以后还可以看到有些运算符的结合方向为"自右至左"即"右结合

算术运算符和运算命令

1.算术运算符 算术运算符 使用说明 +.- 加法(或正号).减法(或负号). *./.% 乘法.除法.取余. ** 幂运算. !.&&.|| 逻辑非(取反).逻辑与(and).逻辑或(or) ==.!=.= 比较符号(相等.不相等.相当于). =.+=.-=.*=./=.%= 赋值运算符.例如a+=1等于a=a+1. ++.-- 增加和减少1. 2.算术运算命令 算术运算命令 使用说明 (()) 用于整数运算的常用运算符,效率较高. let 用于整数运算,类似于"(())&qu

javascript运算符——算术运算符

× 目录 [1]一元加 [2]一元减 [3]递增[4]递减[5]加法[6]减法[7]乘法[8]除法[9]求余 前面的话 javascript中的算术操作主要通过算术运算符来实现,本文将介绍算术运算符的内容.算术运算符包括一元算术运算符和二元算术运算符两种 一元算术运算符 一元算术运算符用于一个单独的操作数,并产生一个新值.在javascript中,一元运算符具有很高的优先级,而且都是右结合(right-associative) 一元算术运算符包括一元加法(+).一元减法(-).递增(++)和递减

不用算术运算符,如何判定一个数是否是二的幂?

这是第一篇博文,我想写下的就是今天学习到的一个算法 即:不用算术运算符判定一个数是否是二的幂: public static bool powerOfTwo(int x) { return (x & (x - 1)) == 0; } X如果是2的幂,那么将x转化成二进制数 就只有首位为1 其他位均为0(4 100,8 1000 16 10000), 那么x-1 就是一个首位为0 其他位均为1的数(3 011, 7 0111 )这个形式的 如果x 是2的幂 那么 x和(x-1)做与运算 返回的值就必

java笔记2之算术运算符

1运算符是什么呢 对常量和变量进行操作的运算符 2运算符分为哪些 算术运算符(+,-,*,/), 赋值运算符 比较运算符 逻辑运算符 位运算符 三目运算符 3运算符 A 算术运算符的注意事项 (1)整数相除只能是整数,如果想得到小数,必须把数据变化为浮点数类型 (2)/获取的是除法操作的商,%获取的是除法操作的余数 代码检测 class OperatorDemo { public static void main(String[] args) { //定义变量 int x = 3; //把3赋值

算术运算符与控制台输入

基本运算符:"+   -   *   /" "+"的作用: +在算术运算符中表示做加法运算 在字符串中,可以用来连接字符串,同时也可以和其他的数据类型的变量进行连接 关系运算符:">,<"  "==,!="  ">=,<=" 关系运算符的作用:用来做比较运算,比较结果是boolean类型 自增(自减)的运算符:++,-- 可以将当前的变量自我增加(减少)1的运算符 1:i++,后++

(7)Powershell算术运算符

本系列博客从这一节开始是Powershell的语法知识,在开始学习语法之前,希望你对Powershell有个基本的了解,比如开发工具的使用,面向对象等特性,详细内容使劲戳这里(1)-(6)的内容. 本节主要介绍Powershell中的算术运算符. Powershell支持以下算术运算符 运算符 用法 例子 注意事项 + 将整数相加:连接字符串.数组和哈希表. 2+5:"str1"+"str2" Powershell是进行算数相加还是字符串的连接是以第一个操作数的类型

python 算术运算符

算术运算符包括:+ .- .* ./ .// .% .** In [29]: 4 + 3 # 加法运算 Out[29]: 7 In [30]: 4 - 3 # 减法运算 Out[30]: 1 In [31]: 4 * 3 # 乘法运算 Out[31]: 12 In [32]: 4 / 3 # 除法运算(如果都为整数则返回结果为整数) Out[32]: 1 In [33]: 4.0 / 3 # 除法运算(如果有小数则返回结果为小数) Out[33]: 1.3333333333333333 In [

java 第12节 基本算术运算符与模运算符

2016-06-29 + 加法运算- 减法* 乘法/ 除法% 取模++ 自加运算-- 自减运算+= 加法赋值-=*=/=%= 1 基本算术运算符 package com.java1995; /** * 基本算术运算符 * @author Administrator * */ public class Test { public static void main(String[] args){ //声明2个int类型变量 int i1=7; int i2=2; System.out.println