Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1715368
  • 博文数量: 782
  • 博客积分: 2455
  • 博客等级: 大尉
  • 技术积分: 4140
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-06 21:37
个人简介

Linux ,c/c++, web,前端,php,js

文章分类

全部博文(782)

文章存档

2015年(8)

2014年(28)

2013年(110)

2012年(307)

2011年(329)

分类: C/C++

2012-03-06 10:54:30

问题1:不申请变量,实现两个数据的交换。
算法分析:对于这个题目,相信许多人都接触过,如果使用异或操作的话,只要抓住一点:一个数a与另外一个数b异或两次之后,最终的值结果仍然是a。
测试程序&&测试结果:
root@localhost:src#vim swap.c 
#include
int main()
{
        int a, b ;
        printf("please input a,b value\n");
        scanf("%d",&a);
        scanf("%d",&b);
        printf("before swap......a=%d,b=%d\n",a,b);

        a = a^b;
        b = a^b;
        a = a^b;
        printf("after swap......a=%d,b=%d\n", a, b);
        return 0;
}
root@localhost:src#gcc swap.c -Wall -O2
root@localhost:src#./a.out             
please input a,b value
56
12
before swap......a=56,b=12
after swap......a=12,b=56
问题2:统计一个整型数据相应二进制的为1的数据位数。
算法分析:一个整型数据是4个字节,16位。从第0位到第15位开始,依次与1想与,如果结果是1,说明这一位是1,将计数器加1。
测试程序&&测试结果:
root@localhost:src#vim count_bin.c
#include
int main()
{
        int a = 67, i, count = 0;

        for(i = 0; i < 16; i++) {
                if((a&1) == 1) {
                        count++;
                }
                a = a>>1;
        }
        printf("count=%d\n", count);
        return 0;
}                                  
root@localhost:src#gcc count_bin.c 
root@localhost:src#./a.out 
count=3
问题3:将一个十进制的数据转换成二进制数据。
算法分析:一个十进制的数据在计算机内就是以二进制的形式存放的,所以没有必要将数据经过一些复杂算法进行转换,只需要将二进制形式存放的数据显示出来就行了。比如要输出x第8位上的对应的二进制数时,将1左移7位,然后让1与x相与,将与的结果再右移7位,强制转换成unsigned类型,加'0'之后,使用putchar()进行输出。
测试程序&&测试结果:
root@localhost:src#vim ten_2.c
#include
int main()
{
        int a = 78, i, count = 0;

        for(i = 31; i >=0; i--) {
                putchar('0'+(unsigned)((a&(1<>i));
        }
        printf("\n");
        return 0;
}                                                                                             
root@localhost:src#gcc ten_2.c 
root@localhost:src#./a.out 
00000000000000000000000001001110


阅读(746) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~