Chinaunix首页 | 论坛 | 博客
  • 博客访问: 94480
  • 博文数量: 41
  • 博客积分: 991
  • 博客等级: 准尉
  • 技术积分: 420
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-11 19:59
文章分类

全部博文(41)

文章存档

2012年(18)

2011年(23)

分类: C/C++

2011-07-31 20:48:47

A:算数移位与逻辑移位:
  1.算数左移同逻辑左移
  2.算数右移用符号位填
  3.逻辑右移用0填
B:负数用补码存储;
  -1 在计算机里的表示是全 1
C:
 
  1. /*******摘至华为面试题********/
  2. int main()
  3. {
  4.   char *p;
  5.  // *p=-128; //输出-128
  6.  *p=-130;
  7. printf("%d",*p); // 输出126
  8. return 0;
  9. }

  10. /*因为负数以补码形式存储,
  11.  C 中char是8位,最高位被去掉,*/
  12. /***************************/
 
  1. /**********正常运行*************/
  2. int x=7;
  3. for(;x;) {
  4.    x=x>>1;
  5. }

  6. /******************************/

  7. /**************死循环**********/
  8. int x=-4;
  9. while(x<0) {
  10.   x>>=1; // x 永远数负数,所以死循环
  11. }

  12. /******************************/
 
/**************************  正数二进制输出   **************************************/
 
  1. #include <stdio.h>

  2. #define STACK_INIT_SIZE 100
  3. #define STACKINCREMENT 10
  4. #define OK 1
  5. #define ERROR 0
  6. #define bit_0 (0x1<<0)

  7. typedef char Elemtype;
  8. typedef int Status;

  9. typedef struct __stack {
  10.     Elemtype *base;
  11.     Elemtype *top;
  12.     int stacksize;
  13. } stack;

  14. Status init_stack(stack *s) //初始化
  15. {
  16.     s->base=(Elemtype *)malloc(STACK_INIT_SIZE*sizeof(Elemtype));
  17.     if(s->base==NULL)
  18.         exit(-1);
  19.     s->top=s->base;
  20.     s->stacksize=STACK_INIT_SIZE;

  21.     return OK;
  22. }

  23. Status stack_destory(stack *s) // 销毁栈
  24. {
  25.     if(NULL == s->base)
  26.         return ERROR;
  27.     free(s->base);
  28.     return OK;
  29. }

  30. Status Push(stack *s,Elemtype e) // 进栈
  31. {
  32.     if((s->top - s->base)>= s->stacksize) {
  33.         s->base=(Elemtype *)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(Elemtype));
  34.         if(NULL == s->base)
  35.             exit(-1);
  36.         s->top=s->base+s->stacksize;
  37.         s->stacksize +=STACKINCREMENT;
  38.     }
  39.     *s->top++=e;
  40.     return OK;

  41. }

  42. Elemtype Pop(stack *s) { // 出栈
  43.     Elemtype e;
  44.     if(s->top == s->base)
  45.         exit(-1);
  46.     e=*(--s->top);
  47.     return e;
  48. }

  49. int main()
  50. {
  51.     stack s;
  52.     int x;
  53.     Elemtype e;

  54.     printf("请输入你要转换的数:");
  55.     scanf("%d",&x);

  56.     init_stack(&s);

  57.     for(;x;) {
  58.         if(x & bit_0)
  59.             Push(&s,1);
  60.         else
  61.             Push(&s,0);
  62.         x=x>>1;
  63.     }

  64.     while(s.top != s.base)
  65.     {
  66.         e=Pop(&s);
  67.         printf("%d",e);
  68.     }

  69.     return 0;

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