位运算——交换两个数

0

本文作者:xjtudll  发布于:2022-2-13  分类:技术心得  点击:

交换两个数
交换两个数相信很多人天天写过,我也相信你每次都会使用一个额外来变量来辅助交换,例如,我们要交换 x 与 y 值,传统代码如下
int tmp = x;
x = y;
y = tmp;
这样写有问题吗?没问题,通俗易懂,万一哪天有人要为难你,**不允许你使用额外的辅助变量来完成交换呢?**你还别说,有人面试确实被问过,这个时候,位运算大法就来了。代码如下:
...

keil warning C316:unterminated conditionals

0

本文作者:xjtudll  发布于:2012-5-16  分类:技术心得  点击:

用Keil 4写程序时遇到这个问题:Warning C316:unterminated conditionals

Google了一番,基本上找到了原因:

类似XX.C(99):warning C316:unterminated conditionals这种警告的话,表明XX.c文件有一个凌乱的条件编译或预编译。例如,用了条件编译#ifndef而忘记写#endif。

...

Keil C51编译错误:address space overflow

0

本文作者:xjtudll  发布于:2012-5-15  分类:技术心得  点击:

近日在使用Keil的时候,遇到了一个问题:address space overflow。程序最初编译的时候没这问题,当我增加一段代码后,出现了这个问题。

...

Keil查看编译后的汇编代码

0

本文作者:xjtudll  发布于:2012-4-21  分类:技术心得  点击:

在使用Keil编译C51时,一般情况下,大家都不去看汇编代码。但在某些特殊情况下,查看汇编代码就是有必要了。

...

如何判断一个正整数是不是2的幂

0

本文作者: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。

C语言交换两个数

0

本文作者:xjtudll  发布于:2011-5-13  分类:技术心得  点击:

可能大家都认为交换两个数如此的简单,没必要写,没新意。例如,交换a和b两个数,教科书上一直这样写:
temp=b;
a=temp;
b=a;

确实很简单。但是最近看到一段代码,觉得十分高超,是这样的:
a^=b;
b^=a;
a^=b;

同样也是三句代码,但是却未使用局部变量,巧妙吧。

值得注意的是,只有满足以下条件,才能使用上述代码

1、a,b均为无符号数
2、a,b长度一致

这个在单片机中还是有作用的哦,尤其是RAM不足的情况下~~~~

Keil C51中嵌入汇编

0

本文作者:xjtudll  发布于:2010-4-20  分类:技术心得  点击:

   我们知道,用C语言实现精确延时是一件比较困难的事情,而用汇编写精确延时程序就简单多了,但是整个程序都用汇编,那就是件头疼的事情。要是能在C里面嵌入汇编,那就爽了,本文介绍的就是如何在Keil C51里嵌入汇编。

...

MSP430 C语言的关键字扩展

0

本文作者:xjtudll  发布于:2010-2-24  分类:技术心得  点击:

1.interrupt 用于中断函数。
定义如下:
语法: interrupt void 函数名()  
       或者
       interrupt[中断向量]void 函数名()
...

简易方波信号发生器

0

本文作者:xjtudll  发布于:2010-1-31  分类:技术心得  点击:

简易正弦波信号发生器
这个是帮别人做的。

方波信号发生器
要求:

...

Page 1 of 1 « 首页...«1»...尾页 »