2008년 1학기 시스템 프로그래밍 과제
1. Reverse bits
Write a C program to read in a number (in hexadecimal), reverse the bit order,
and print out the result (in hex).
For example, an input of 123456AB would give D56A2C48.
Your program should handle any number representable
as a 32-bit unsigned number.
If there are less than 8 hex-digits in the input, you should pad it with 0’s.
코드
/*
* Reverse_bits (Reverse bits)
*
* This function reverse the number by bit. (e.g. 0101 -> 1010)
*
* - Argument
* input_number : user input number
*
* - Return
* void
*
*
* First, get the number by argument.
* set the return variable zero because If there are less than 8 hex-digits in the input, then I pad it with 0.
*
* & operator is bit-level AND operation.
* | operator is bit-level OR operation.
*
* number & 0x01 -> all 0 except number's least significant bit. (e.g. 1010 0101 & 0x01 -> 0000 0001)
* So I take the number's least significant bit.
*
* Then put it result_value variable.
* 0 | 0 = 0, 1 | 0 = 1, 0 | 1 = 1
* So number's least significant bit is 1, then all same except set 1 in result_value least significant bit. (e.g. 0101 1010 | 0000 0001 -> 0101 1011)
* or number's least significant bit is 0, then all same except set 0 in result_value least significant bit. (e.g. 0101 1010 | 0000 0000 -> 0101 1010)
*
* first do it and looping because and/or operation do bit size(e.g. 32) but shift operation must do bit size - 1.
* input_number do right shift 1. Therefore I use next bit.
* and result_value do left shift to write next bit.
* go to the first for loop until bit size - 1.
*
* Finally print the result.
*
*
* example 1011 -> 1101
* code input_number result_value
* first 1011 0000
* result_value |= (input_number & 0x01); 1011 0001
* input_number = input_number >> 1; 0101 0001
* result_value = result_value << 1; 0101 0010
* result_value |= (input_number & 0x01); 0101 0011
* input_number = input_number >> 1; 0010 0011
* result_value = result_value << 1; 0010 0110
* result_value |= (input_number & 0x01); 0010 0110
* input_number = input_number >> 1; 0001 0110
* result_value = result_value << 1; 0001 1100
* result_value |= (input_number & 0x01); 0001 1101
*
*
* Made by Bak JinYeong, 2008.03.13
* Edited by Bak JinYeong, 2008.03.14*/
void Reverse_bits(unsigned int input_number)
{
unsigned int result_value = 0; // unsigned int variable use result value. It intialize 0.
int for_loop_i = 0; // integer variable use loop for loop sentence
result_value |= (input_number & 0x01); // take input_number's least significant bit and set into result_value's least significant bit.
for(for_loop_i = 1 ; for_loop_i < BUS_SIZE_BIT ; for_loop_i++) // loop bus size bit - 1
{
input_number = input_number >> 1; // input_number do right shift 1
result_value = result_value << 1; // result_value do left shift 1
result_value |= (input_number & 0x01); // take input_number's least significant bit and set into result_value's least significant bit.
}
printf("Reverse bits : 0x%x\n", result_value); // print result by %x
}
- 2008년 1학기 시스템 프로그래밍 - AtoH & HtoA (0)2008/03/19
- 2008년 1학기 시스템 프로그래밍 - AtoI & ItoA (0)2008/03/19
- 2008년 1학기 시스템 프로그래밍 - Little Endian... (0)2008/03/19
- 2008년 1학기 시스템 프로그래밍 - Reverse bits (0)2008/03/19
- 이상 이하 게임 (4)2006/01/26
- 가위 바위 보 게임 (2)2006/01/26
- 성적 높일려면 얼마나 노력해야 할까? (4)2006/01/14
글에 잘못된 점, 다른 점, 부족한 점이 있다면 지적해주세요.
댓글, 트랙백, 메일 모두 고맙습니다.








댓글을 달아 주세요