第5章 程序设计基本概念
5.5运算符问题
面试例题 3-4 参考下面的链接:位运算 实现加法 - zhongjie的专栏 - CSDN博客
https://blog.csdn.net/zhongjiekangping/article/details/6855864
用位运算实现加法也就是计算机用二进制进行运算。
备注:方案一:abs(a-b) 的值就是a和b的差值的绝对值,加上(a+b)的值后就是两个最大数的值相加。
备注:此处 函数 bool ()返回值为0或1,当a>b时,表达式的为真,返回1,否者返回0。
对应 max()函数中,返回a或者b
备注:考虑到数据有可能位浮点型,所以只能采用内存交换(copy)来实现数据交换。
C库函数:memcpy()
头文件:string.h
描述
C 库函数 void *memcpy(void *str1, const void *str2, size_t n) 从存储区 str2 复制 n 个字符到存储区 str1。
声明
下面是 memcpy() 函数的声明。
void *memcpy(void *str1, const void *str2, size_t n)
参数
- str1 -- 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。
- str2 -- 指向要复制的数据源,类型强制转换为 void* 指针。
- n -- 要被复制的字节数。
返回值
该函数返回一个指向目标存储区 str1 的指针。
#include <stdio.h>
#include <string.h>
#define swap(a,b) \
{char tempBuf[10]; memcpy(tempBuf, &a, sizeof(a)); memcpy(&a, &b, sizeof(b)); memcpy(&b, tempBuf, sizeof(tempBuf)); }
int main()
{
double a = 2, b = 3;
swap(a,b);
printf("%lf %lf \n",a,b);
return 0;
}
注:vs2013测试通过