交换两个数
交换两个数相信很多人天天写过,我也相信你每次都会使用一个额外来变量来辅助交换,例如,我们要交换 x 与 y 值,传统代码如下
int tmp = x;
x = y;
y = tmp;
这样写有问题吗?没问题,通俗易懂,万一哪天有人要为难你,**不允许你使用额外的辅助变量来完成交换呢?**你还别说,有人面试确实被问过,这个时候,位运算大法就来了。代码如下:
...
本文作者:xjtudll 发布于:2022-2-13 分类:技术心得 点击:
本文作者:xjtudll 发布于:2012-5-16 分类:技术心得 点击:
用Keil 4写程序时遇到这个问题:Warning C316:unterminated conditionals
Google了一番,基本上找到了原因:
类似XX.C(99):warning C316:unterminated conditionals这种警告的话,表明XX.c文件有一个凌乱的条件编译或预编译。例如,用了条件编译#ifndef而忘记写#endif。
...
本文作者:xjtudll 发布于:2012-5-15 分类:技术心得 点击:
近日在使用Keil的时候,遇到了一个问题:address space overflow。程序最初编译的时候没这问题,当我增加一段代码后,出现了这个问题。
...
本文作者:xjtudll 发布于:2012-4-21 分类:技术心得 点击:
在使用Keil编译C51时,一般情况下,大家都不去看汇编代码。但在某些特殊情况下,查看汇编代码就是有必要了。
...本文作者:xjtudll 发布于:2011-8-27 分类:技术心得 点击:
估计用递归的方法大家都知道,就不赘述了
这里使用一个更简单的方法。
若一个正整数是2的幂,则这个数在计算中的表示肯定是以下形式:0x00...1000...B省略号表示若干个0.问题就转变为一个等价的命题:如何判断给定的一个正整数是如0x00...1000...B这种形式(二进制表示式中只有唯一的一个1)。(B表示是以二进制表示的)
实际上:
如果一个数n是2的幂,则满足 n & (n-1) = 0。
举个特例,如n = 8,即0x1000,则0x1000 & 0x0111 = 0。
可能大家都认为交换两个数如此的简单,没必要写,没新意。例如,交换a和b两个数,教科书上一直这样写:
temp=b;
a=temp;
b=a;
确实很简单。但是最近看到一段代码,觉得十分高超,是这样的:
a^=b;
b^=a;
a^=b;
同样也是三句代码,但是却未使用局部变量,巧妙吧。
值得注意的是,只有满足以下条件,才能使用上述代码
1、a,b均为无符号数
2、a,b长度一致
这个在单片机中还是有作用的哦,尤其是RAM不足的情况下~~~~
本文作者:xjtudll 发布于:2010-4-20 分类:技术心得 点击:
我们知道,用C语言实现精确延时是一件比较困难的事情,而用汇编写精确延时程序就简单多了,但是整个程序都用汇编,那就是件头疼的事情。要是能在C里面嵌入汇编,那就爽了,本文介绍的就是如何在Keil C51里嵌入汇编。
...
本文作者:xjtudll 发布于:2010-2-24 分类:技术心得 点击:
1.interrupt 用于中断函数。
定义如下:
语法: interrupt void 函数名()
或者
interrupt[中断向量]void 函数名()
...