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;
}