程序员面试宝典(第5版)-笔记

第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测试通过

猜你喜欢

转载自blog.csdn.net/qq_33591755/article/details/89097966