苏嵌//谭晓寅//2018.7.16

 

 

 

今日学习任务

 

  1. 掌握变量与常量(变量的三大特点);
  2. 掌握C语言中各种运算符的运算规则(自增自减运算、位运算)

今日任务完成情况

任务1、2都已完成

今日开发中出现的问题汇总

 

  1. 改变常量值运行时出现段错误;
  2. 自增运算中i++ 与 ++i计算时出现错误;

今日未解决问题

今日开发收获

1、了解了进程的虚拟地址空间;

2、对自增自减运算及位运算更加熟练。

 

自我评价

 

  1. 按照开发规范完成了既定任务;
  2. 编写代码逻辑不够清晰。

其他

 

 

1、编写一个c函数,该函数给出了一个整数中被置1的位的个数

  1 #include <stdio.h>

  2

  3 int count_1(int num)

  4 {

  5     int i;

  6     int count = 0;

  7

  8     for(i = 0; i < 32; i ++)

  9     {

 10         if((num & 1) == 1)

 11         {

 12             count ++;

 13         }

 14         num = num >> 1;

 15     }

 16

 17     printf("The number of 1 is:\n");

 18     printf("%d\n",count);

 19 }

 20

 21 int main()

 22 {

 23     int num;

 24

 25     printf("Please input a number:\n");

 26     scanf("%d",&num);

 27

 28     count_1(num);

 29

 30     return 0;

31 }

运行结果:

:Please input a number:

15

The number of 1 is:

4

 

2、输入一个整数a,再输入两个整数p1,p2(p1,p2<32),输出该整数的二进制表示方法中从右端开始的p1到p2位。

  1 #include <stdio.h>

  2

  3 int retain(int num)

  4 {

  5     int i;

  6     unsigned int mask = 0x80000000;

  7

  8     for(i = 0; i < 32; i ++)

  9     {

 10         if((num & mask) == mask)

 11         {

 12             printf("1");

 13         }

 14         else

 15         {

 16             printf("0");

 17         }

 18

 19         if((i + 1) % 4 == 0)

 20         {

 21             printf(" ");

 22         }

 23         num = num << 1;

 24     }

 25     printf("\n");

 26 }

 27

 28 int main()

 29 {

 30     int p1;

31     int p2;

 32     int num;

 33     unsigned int mask = 0xffffffff;

 34

 35     printf("Please input a number:\n");

 36     scanf("%d",&num);

 37     printf("Please intpu the range:\n");

 38     scanf("%d",&p1);

 39     scanf("%d",&p2);

 40

 41     printf("The changed bit number:\n");

 42     mask = (mask >> (32 - (p2 - p1 + 1))) << p1;

 43     num = num & mask;

 44     retain(num);

 45

 46     return 0;

 47 }

运行结果:

Please input a number:

16

Please intpu the range:

4 11

The changed bit number:

0000 0000 0000 0000 0000 0000 0001 0000

 

3、输入一个32位的整数a,使用按位异或^运算,生成一个新的32位整数b,使得该整数b的每一位等于原整数a中该位左右两边两个bit位的异或结果。

  1 #include <stdio.h>

  2

  3 int func(int num)

  4 {

  5     int i;

  6     int a[32];

  7     int b[32];

  8

  9     for(i = 31; i >= 0; i --)

 10     {

 11         if((num & 1) == 1)

 12         {

 13             a[i] = 1;

 14         }

 15         else

 16         {

 17             a[i] = 0;

 18         }

 19         num = num >> 1;

 20     }

 21

 22     i = 1;

 23     b[0] = a[0];

 24     b[31] = a[31];

 25     for(i = 1; i < 31; i ++)

 26     {

 27         b[i] = a[i - 1] ^ a[i + 1];

 28     }

 29

 30     i = 0;

31     printf("a:\n");

 32     for(i = 0;i < 32; i ++)

 33     {

 34         if(i % 4 == 0)

 35         {

 36             printf(" ");

 37         }

 38         printf("%d",a[i]);

 39     }

 40     printf("\n");

 41

 42     i = 0;

 43     printf("b:\n");

 44     for(i = 0; i < 32; i ++)

 45     {

 46         if(i % 4 == 0)

 47         {

 48             printf(" ");

 49         }

 50         printf("%d",b[i]);

 51     }

 52     printf("\n");

 53 }

 54

 55 int main()

 56 {

 57     int num;

 58

 59     printf("Please input a number:\n");

60     scanf("%d",&num);

 61

 62     func(num);

 63

 64     return 0;

 65 }

运行结果:

Please input a number:

8

a:

 0000 0000 0000 0000 0000 0000 0000 1000

b:

 0000 0000 0000 0000 0000 0000 0001 0100

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值