易截截图软件、单文件、免安装、纯绿色、仅160KB

不用临时变量交换两个数的值(C实现)

当要交换两个数的值时,通常的做法是定义一个临时变量,然后再进行交换。那么能不能不用临时变量而交换两个数的值呢?可以的!C语言提供的异或运算就可以实现这样的操作。
 
异或运算符^也称XOR运算符,它的规则是若参加运算的两个二进位同号,则结果为0(假);异号为1(真)。即0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 0 = 1, 1 ^ 1 = 0。
 
例:
#include <stdio.h>
int main(int argc, char *argv[])
{
    int a = 2, b = 6;
    a = a ^ b;
    b = b ^ a;
    a = a ^ b;
    printf("a = %d b = %d\n", a, b);
    return 0;
}
结果如下: a = 6 b = 2
分析:前两个赋值语句:“a = a ^ b;”和“b = b ^ a;”相当于b = b ^ (a ^ b),而b ^ a ^ b等于a ^ b ^ b。b ^ b的结果为0,因为同一个数与相向相^,结果必为0。因此b的值等于a ^ 0,即a,其值为2。
再执行第三个赋值语句:“a = a ^ b”。由于a的值等于(a ^ b),b的值等于(b ^ a ^ b),因此,相当于a = a ^ b ^ b ^ a ^ b,即a的值等于a ^ a ^ b ^ b ^ b,等于b。
另外两种方法:
方法一:
void swap(int *p, int *q)
{
    *p = *p + *q;
    *q = *p - *q;
    *p = *p - *q;
}
方法二:
void swap(int *p, int *q)
{
    *p = *p + *q - (*q = *p);
}
原理为算术运算符的结合顺序为自左至右。
注:可以把异或的三条语句压缩为一条:a ^= b ^= a ^= b;
要交换三个变量的值,用下面变量会报错:c = a + c - (a = b, b = c);
下面来分析一下,先看一个示例程序,如下:
#include <stdio.h>
int main(int argc, char *argv[])
{
    int a = 1;
    int b = 2;
    int c = 3;
    c = a + c - (a = b, b = c);
    printf("a = %d\n", a);
    printf("b = %d\n", b);
    printf("c = %d\n", c);
    return 0;
}
编译运行,结果如下:a = 2 b = 3 c = 2
可见,最初目标中的c = 1部分没能实现。于是分析原因:


相关文档:

c 指针实现面向对象

指针是C的灵魂,正是指针使得C存在了这么多年,而且将长期存在下去。事实上,我自己不用C语言写程序已经有一年了,工作中接触到的只有java,python和javascript.最近用C完成了一下类似于OO中的封装(即"类")的概念,顺便把指针复习了下,感觉有必要记一下。
    本文中的例子有这样两个概念:任务(Task) ......

C变长参数

C语言中可变参数的用法
我们在C语言编程中会遇到一些参数个数可变的函数,例如printf()
这个函数,它的定义是这样的:
int printf( const char* format, ...);
它除了有一个参数format固定以外,后面跟的参数的个数和类型是
可变的,例如我们可以有以下不同的调用方法:
printf("%d",i);
printf("%s",s);
printf( ......

C#与C/C++的区别的地方


编译:C程序直接编译成标准的二进制可执行的代码,但C#的源程序并不是被编译成二进制可执行的形式,而是一种中间语言(MSIL),类似JAVA中的字节码
结构体:C#的结构体与C++的结构体相似。但是C#的结构体与类是不同的,而且不支持继承。
预编译:C#中存在预编译的指令支持条件编译,警告,错误报告和编译行控制。其指令 ......

TURBO C 2.0 文件分类

 
 2009-12-24          21:15:41
 
TURBO C 2.0 文件分类
 
·原创·
网上下载TURBO C 2.0很混乱,一直想把她整理一下,使各个实例分开,各个不同部分分开。断断续续花了很长时间,到今天终于整理完了。发帖出来给大家看看。有需要的 ......

C/C++基本数据类型

学了C然后C++,然后MFC/Windows,然后是C#,其中数据类型很多,由基本类型衍生的typedef类型也N多。熟知基本数据类型是我们正确表达实际问题中各种数据的前提,因此我分类总结了一下C/C++/Windows /C#基本数据类型,以便日后查阅。
         ANSI C/C++基本数据类型:
Type
Size ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号