zoukankan      html  css  js  c++  java
  • C和指针 第五章 习题

    下列输出的值:

    #include <stdio.h>
    
    int func(){
    	static int count = 1;
    	return ++count;
    }
    
    int main()
    {
    	int answer = 0;
    	answer = func() - func() * func();
    	printf("%d
    ", 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("
    ");
    }
    
    int main()
    {
    	unsigned int input = 25;
    	unsigned int result;
    
    	printf("%d
    ", input);
    	print_bits(input);
    	
    	result = reverse_bits(input);
    
    	printf("%u
    ", 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
    ", result);
    
    	return 0;
    }
    

      输出:

    oxc7ff
    

      

  • 相关阅读:
    libcurl的内存泄露的坑
    Linux 经典面试题(转)
    全栈项目|小书架|服务器开发-Koa2 全局异常处理
    强大的CompletableFuture
    如何进行kubernetes问题的排障
    Golang的json包
    JAVA面试题:Spring中bean的生命周期(转)
    建造者模式
    Netty学习篇④-心跳机制及断线重连
    Fabric1.4:手动启动 first-network 网络(三)
  • 原文地址:https://www.cnblogs.com/yangxunwu1992/p/5770291.html
Copyright © 2011-2022 走看看