1.
#include<stdio.h>
int main()
{
char ch ;
while ( ( ch = getchar() ) != '\n' )
{
if ( ch >= 'A' && ch <= 'Z' )
ch += 'a' - 'A' ;
putchar(ch) ;
}
}
2.
#include<stdio.h>
int main()
{
int ch ;
while ( ( ch = getchar() ) != '\n' )
{
if ( ch >= 65 && ch <= 90 )
ch = ch < 78 ? ch + 13 : ch - 13 ;
if ( ch >= 97 && ch <= 122 )
ch = ch < 110 ? ch + 13 : ch - 13 ;
putchar(ch) ;
}
}
3.返回值有问题不知该怎么解决
主函数
#include<stdio.h>
#include<stdlib.h>
unsigned int reverse_bits ( unsigned int value ) ;
int main()
{
unsigned int value ;
char str[100] ;
scanf ( "%d", &value ) ;
itoa ( value, str, 2 ) ;
printf ( "%s\n", str ) ;
value = reverse_bits ( value ) ;
itoa ( value, str, 2 ) ;
printf ( "%s\n", str ) ;
printf ( "%d\n", value ) ;
}
自己写的
unsigned int reverse_bits ( unsigned int value )
{
value = ~value ;
value = value << 26 ;//32位
return value ;
课后答案
unsigned int reverse_bits ( unsigned int value )
{
unsigned int answer ;
unsigned int i ;
answer = 0 ;
for ( i = 1; i != 0; i <<= 1 )
{
answer <<= 1 ;
if ( value & 1 )
answer |= 1 ;
value >>= 1 ;
}
return answer ;
}
4.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 1000
void set_bit ( char bit_array[], unsigned bit_number ) ;
void clear_bit ( char bit_array[], unsigned bit_number ) ;
void assign_bit ( char bit_array[], unsigned bit_number, int value ) ;
int text_bit ( char bit_array[], unsigned bit_number ) ;
int main()
{
char ch ;
int value, num, len ;
unsigned bit_number ;
char bit_array[MAX] ;
printf ( "请输入num和value的值(value为1或0):" ) ;
scanf ( "%d %d", &num, &value ) ;
a: if ( value != 0 && value != 1 )
{
printf ( "请重新输入value的值(value为1或0):" ) ;
scanf ( "%d", &value ) ;
goto a ;
}
itoa ( num, bit_array, 2 ) ; //用itoa函数将数转换成二进制并存到bit_array数组中
len = strlen ( bit_array ) ; //数组长度
printf ( "请输入bit_number(bit_number小于%d):", len + 1 ) ; //输入要操作的位
scanf ( "%d", &bit_number ) ;
b: if ( bit_number < 0 || bit_number > len )
{
printf ( "请重新输入bit_number(bit_number小于%d):", len + 1 ) ;
scanf ( "%d", &bit_number ) ;
goto b ;
}
set_bit ( bit_array, bit_number ) ;
clear_bit ( bit_array, bit_number ) ;
assign_bit ( bit_array, bit_number, value ) ;
printf ( "操作之后:%d\n", text_bit ( bit_array, bit_number ) ) ;
return 0 ;
}
void set_bit ( char bit_array[], unsigned bit_number ) //置1
{
printf ( "操作之前:%s\n", bit_array ) ;
bit_array[bit_number-1] = '1' ; //数组内存储的是字符所以用'1'
printf ( "操作之后:%s\n", bit_array ) ;
}
void clear_bit ( char bit_array[], unsigned bit_number )//置0
{
printf ( "操作之前:%s\n", bit_array ) ;
bit_array[bit_number-1] = '0' ;
printf ( "操作之后:%s\n", bit_array ) ;
}
void assign_bit ( char bit_array[], unsigned bit_number, int value )
{
printf ( "操作之前:%s\n", bit_array ) ;
if ( value == 0 )
bit_array[bit_number-1] = '0' ;
else
bit_array[bit_number-1] = '1' ;
printf ( "操作之后:%s\n", bit_array ) ;
}
int text_bit ( char bit_array[], unsigned bit_number )
{
int bour ;
if ( bit_array[bit_number-1] != 0 )
bour = 1 ;
else
bour = 0 ;
return bour ;
}
5.自己写的,关于位的知识看到一篇文章写得很细,推荐给大家点击打开链接
#include<stdio.h>
int store_bit_field ( int orginal_value, int value_to_store, unsigned starting_bit, unsigned ending_bit ) ;
int main()
{
unsigned num ;
int orginal_value ;
int value_to_store ;
unsigned starting_bit ;
unsigned ending_bit ;
printf ( "请输入:") ;
scanf ( "%x %x %d %d", &orginal_value, &value_to_store, &starting_bit, &ending_bit ) ;
num = store_bit_field ( orginal_value, value_to_store, starting_bit, ending_bit ) ;
printf ( "0x%x", num ) ;
return 0 ;
}
int store_bit_field ( int orginal_value, int value_to_store, unsigned starting_bit, unsigned ending_bit )
{
unsigned int mask ;
unsigned int num, unmask ;
unsigned int i = 31 - starting_bit ; //32位
mask = ( ~0 << ending_bit) & ( ~0 >> i) ; //创建掩码
unmask = ~mask ; //掩码反码
unmask &= orginal_value ; //用反码对原值执行位AND操作
mask = mask & (value_to_store<<ending_bit) ;//新值左移与源码执行位AND操作
num = mask | unmask ; //结果值与反码进行位OR操作
return num ;
}
网上找的,用循环建掩码学到了哈哈
#include <stdio.h>
int store_bit_field(int original_value, int value_to_store,
unsigned starting_bit,unsigned ending_bit);
int main(void)
{
printf("0x%x\n",store_bit_field(0x0,0x1,4,4));
printf("0x%x\n",store_bit_field(0xffff,0x123,15,4));
printf("0x%x\n",store_bit_field(0xffff,0x123,13,9));
return 0;
}
int store_bit_field(int original_value, int value_to_store,
unsigned starting_bit,unsigned ending_bit)
{
int value;
int i = ending_bit;
int unmask = 0;
int mask = 0;
int num = starting_bit - ending_bit + 1;
while(num != 0){
mask <<= 1;
mask |= 1;
num--;
}
while(i != 0){
i--;
mask <<= 1;
}
unmask = ~mask;
original_value &= unmask;
i = ending_bit;
while(i != 0){
i--;
value_to_store <<= 1;
}
value = value_to_store & mask;
value |= original_value;
return value;
}