下列输出的值:

#include <stdio.h>

int func(){
static int count = 1;
return ++count;
} int main()
{
int answer = 0;
answer = func() - func() * func();
printf("%d\n", answer); return 0;
}

answer = 2 - 3 * 4;

所以结果 -10;

5.3 编写函数 unsigned int reverse_bits(unsigned int value);将二进制模式从左到右变换,输入25输出2 550 136 832

#include <stdio.h>

//反转bit位
unsigned int reverse_bits(unsigned int value)
{
unsigned int result = 0;
unsigned int tmp = 1;
//计算unsigned int位数
int len = sizeof(unsigned int) * 8;
int idx; //每次向右位偏移一位
for(idx = 0; idx < len; idx++){
//判断bit值,如果是1
if(((value >> idx)) & 1){
//则将tmp中对应的另一端的位置为1
tmp = 1 << (len - idx - 1);
//tmp和result取或运算置位1
result |= tmp;
}
}
return result;
}
//将value二进制形式打印出来
void print_bits(unsigned int value)
{
int len = sizeof(unsigned int) * 8;
int idx;
int bit; for(idx = 1; idx <= len; idx++){
//从左往右,通过位偏移后,和1取与运算,打印bit位的值
bit = 1 & (value >> (len - idx)); printf("%d", bit);
//四位一空,方便阅读
if(idx % 4 == 0){
printf(" ");
}
}
printf("\n");
} int main()
{
unsigned int input = 25;
unsigned int result; printf("%d\n", input);
print_bits(input); result = reverse_bits(input); printf("%u\n", result);
print_bits(result); return 0;
}

  输出:

25
0000 0000 0000 0000 0000 0000 0001 1001
2550136832
1001 1000 0000 0000 0000 0000 0000 0000

5.5把给定的值存储到一个整数中指定的几个位

#include <stdio.h>

int store_bit_field(int original_value, int value_to_store, unsigned starting_bit, unsigned ending_bit)
{
int mask = 0;
int tmp = 0;
//制作对应的起始位置掩码
for(int idx = starting_bit; idx >= ending_bit; idx--){
tmp = 1 << idx;
mask |= tmp;
} //通过掩码将original_value 对应的范围内置0
original_value &= ~mask;
//将value_to_store对齐起始和结束位置
value_to_store <<= ending_bit;
//value_to_store中将超出范围的部分置0
value_to_store &= mask;
//将值和original_value取或保存值
original_value |= value_to_store; return original_value;
} int main()
{
int result;
result = store_bit_field(0xffff, 0x123, 13, 9);
printf("0x%0x\n", result); return 0;
}

  输出:

oxc7ff

  

最新文章

  1. Linux 基础操作
  2. 关于解析P D X P 协议的心得
  3. Android 应用程序的反编译
  4. 【BZOJ】【1018】【SHOI2008】堵塞的交通traffic
  5. javaScript-原型、继承-02
  6. CodeForces 681C Heap Operations(模拟)
  7. 1.0-springboot的java配置方式
  8. C语言 分支与循环 递推思想 穷举 流程的转移控制
  9. 0510JS运算符
  10. redis---------AOF文件异常导致的redis无法载入
  11. 清除cookie
  12. Python学习—数据库篇之SQL补充
  13. sharding:谁都能读懂的分库、分表、分区
  14. vue-cli sass安装
  15. 转://oracle 11gR2 oracle restart 单机使用asm存储 主机名发生更改处理过程
  16. Ex 5_21 无向图G=(V,E)的反馈边集..._第九次作业
  17. PL/SQL Dev连接Oracle弹出空白提示框的解决方法分享
  18. node入门学习(一)
  19. axios post 踩坑之 post传参
  20. SCTF 2014 PWN400 分析

热门文章

  1. What is a RaycastHit normal?
  2. Python 过算符和数据类型
  3. caffe的python接口学习(8):caffemodel中的参数及特征的抽取
  4. 使用配置 API配置注入(Container stand-alone API)
  5. 83 parrted-分区和分区大小的调整
  6. MyISAM 和InnoDB 的区别.(存储,索引, 事务, 锁)
  7. redis的数据类型和指令
  8. 微信小程序 关于底部导航设置
  9. Git的使用
  10. Protobuf for Python测试保存和读取文件