C语言如何不使用“+”号进行加法运算!
来源:互联网 发布:网络活动策划书 编辑:程序博客网 时间:2024/05/16 14:19
如题,如果别人要你用c语言不用“+”号实行一次加法运算,你有什么办法呢?很多人都说,指针是c语言的灵魂那么,我们就试着使用指针和地址来尝试着进行一次不用“+”号的加法运算吧。
知道指针和数组还有数组指针吧?如果没学过,请点进指针与数组看一下什么是数组指针还有它可以做那些运算。
程序员,什么都不说,先来一段程序。
那么p[1]是怎么样运算的呢?它的运算首先是把p[1]化成(p+1),也就是说“p[1]”与“(p+1)”等价。
看见没有,我们没有输入“+”号,而这里出现了“+”号。也就是说,我们可以通过类似“p[1]”这样的运算来获取“+”号然后进行加法运算。那么,我们如何能利用到它的加号呢?&和*符大家都知道吧?&是取地址符,*是跟&互逆的。
我们就试着运用&和*这两个符号在地址和数值中穿梭。首先,我们定义一个add函数
怎么把这个函数中的a和b不用”+”号就把它相加呢?我们试着使用上述提到的“p[1]”这形式引出“+”号。
因为使用“a[b]”的形式必须的把a或b转换成指针类型。那我们a强制转为指针类型试试,那转成什么类型的指针呢?因为“p[1]”等价于“(p+1)”,“p[2]”等价于“(p+2)”,p存放的是一个int类型的地址,int 类型的在64 位机占4个字节,32位机占2个字节,笔者的编译环境是在64为下编译,所以,p[1]和p[2]的地址的距离是4。所以地址增加应该为”p+1*sizeof(int)”,我们要用的是其中普通加法,所令sizeof()这个要等于1.所以我们选择把a强制转换char*类型;
现在,a[b]就等价于*(a+b)了,如何把*号去掉?这就得使用与它互逆的那个取地址符了
现在是不是已经有了(a+b)了?但是,这样就行了么?我们编译一下看看有什么反应:看见没有,出现一个警告,|警告:分配整数指针没有cast。我们之前是不是把a强制转换成char*类型的了?那我们现在获得最终结果,要把结果强制转换成我们需要的类型,为了防止数据丢失,我们把它强制转换成long 类型,因为在64位机中指针字节是八位。所以,我们改成这样
现在好了,没有警告,运行成功。恭喜你,实现了不用输入+号就能让两个数相加。That’s all.Thanks.
如有错误或不好的地方,请及时指出,谢谢合作。
- C语言如何不使用“+”号进行加法运算!
- 面试题:不使用+-*/进行加法运算
- c语言高精度大整数加法运算
- C语言大数运算-加法篇
- 不使用加号的加法运算
- 实现加法:不使用加减乘除运算
- 不使用运算符号实现加法
- 不使用加减乘除运算做加法
- 不使用"+"," -"操作符完成加法运算
- 不使用四则运算实现加法运算
- 程序中不使用“+”法运算,实现整数加法运算
- C++正整数的加法运算(不使用+-*/运算符号)
- 不使用算术运算符实现加法运算
- c++---不使用“+”实现加法操作
- [Leetcode #371]Sum of Two Integers 不使用加法运算符完成加法运算
- 《剑指Offer》面试题:不使用加减乘除做加法运算
- LeetCode 两个整数的加法运算,不使用+符号
- C语言 加法 大数加法
- java 如何显示当前系统时间
- Linux 下面安装tomcat
- iOS 关于post异步请求
- Light oj 1140 - How Many Zeroes? 数位dp
- 丢掉幻想--《疯狂动物城》观后感
- C语言如何不使用“+”号进行加法运算!
- Docker —— 用于统一开发和部署的轻量级 Linux 容器
- CentOS虚拟机中安装VMWare Tools
- AtomicInteger简介
- js处理json数组
- eclipse中ant的安装
- Material Design学习(三)
- [精]Oracle 内存结构详解
- 设计模式-适配器模式