C和指针第五章编程练习

5.9.1

#include <stdio.h>
#include <ctype.h>
int main(void)
{
    char ch;
    while((ch = getchar()) != '\n')
    {
        if('A' <= ch && ch <= 'Z')
            ch = tolower(ch);
        putchar(ch);
    }
    return 0;
}

5.9.2

#include <stdio.h>
int main(void)
{
    char ch;
    while((ch = getchar()) != '\n')
    {
        if(('A' < ch && ch < 'Z') || ('a' < ch && ch < 'z'))
            ch += 13;
        putchar(ch);
    }
    return 0;
}

5.9.3

unsigned int reverse_bits(unsigned int value)
{
    unsigned int n = 0;//用于承接结果
    unsigned int i;
    for(i = 1; i != 0; i <<= 1, value >>= 1)//假设在4位运算上 i初值为0001 每次左移一位这样根据i!=0这个条件循环可执行4次
    {
        n <<= 1;
        if(value & 1)//每次取出最右边的值
            n |= 1;
    }
    return n;
}

5.9.4

void set_bit(char bit_array[], unsigned bit_number)
{
    bit_array[bit_number - 1] = '1';
}
void clear_bit(char bit_array[], unsigned bit_number)
{
    bit_array[bit_number - 1] = '0';
}
void assign_bit(char bit_array[], unsigned bit_number, int value)
{
    if(!value)
    {
        bit_array[bit_number - 1] = '0';
        return;
    }
    bit_array[bit_number - 1] = '1';
}
int test_bit(char bit_array[], unsigned bit_number)
{
    return bit_array[bit_number - 1] ? 1 : 0;
}

5.9.5

int store_bit_field(int original_value, int value_to_store, unsigned starting_bit, unsigned ending_bit)
{
    unsigned n = 0;
    int i;
    for(i = 0; i < starting_bit - ending_bit + 1; i++)//创建掩码
    {
        n <<= 1;
        n |= 1;
    }
    n <<= 13 - (starting_bit - ending_bit);//创建完掩码左移到起始位
    original_value &= ~n;
    value_to_store <<= ending_bit;
    value_to_store &= n;
    return original_value | value_to_store;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值