30/09/2018, 16:11

Chuyển đổi các hệ cơ số hoạt động như thế nào?

Em lấy code trên http://www.cplusplus.com/ nhưng không hiểu.

Đoạn code dưới đây nó sẽ đổi từ hệ 10 sang hệ 16 rồi sang hệ 2 . Nhưng khi em bỏ dòng

itoa (i,buffer,10);
  printf ("decimal: %s
",buffer);

Thì nó lại không đổi được. Mọi người giải thích giúp em tại sao nó lại thế?

Đây là code hoàn chỉnh của bài này

/* itoa example */
#include <stdio.h>
#include <stdlib.h>

int main ()
{
  int i;
  char buffer [33];
  printf ("Enter a number: ");
  scanf ("%d",&i);
  itoa (i,buffer,10);
  printf ("decimal: %s
",buffer);
  itoa (i,buffer,16);
  printf ("hexadecimal: %s
",buffer);
  itoa (i,buffer,2);
  printf ("binary: %s
",buffer);
  return 0;
}
Nguyễn Minh Dũng viết 18:12 ngày 30/09/2018

Bài này người ta tận dụng hàm itoa là hàm chuyển đổi giữa integer và character. Hàm này cho phép mình chuyển đổi theo hệ cơ số. sang 10, 16 hay 2.

Nên nếu em bỏ đi thì làm sao mà chạy được.

itoa (i,buffer,10);

tức là chuyển i sang hệ 10, lưu vào buffer.
Tương tự cho các câu lệnh khác.

Thai Hoc Nguyen viết 18:12 ngày 30/09/2018

Thưa anh
Em biết rằng nếu ta nhập số 18 vào và đổi nó sang hệ 10 thi
buffer[0]==‘1’
buffer[1]==‘8’
buffer[2]==NULL
anh có thể chỉ em cơ chế để chuyển sang hệ 16 của dòng
itoa (i,buffer,16);
Em cảm ơn anh !

Nguyễn Minh Dũng viết 18:21 ngày 30/09/2018

anh có thể chỉ em cơ chế để chuyển sang hệ 16 của dòng
itoa (i,buffer,16);

Em có thể tham khảo code này

/* A C++ program to implement itoa() */
#include <iostream>
using namespace std;
 
/* A utility function to reverse a string  */
void reverse(char str[], int length)
{
    int start = 0;
    int end = length -1;
    while (start < end)
    {
        swap(*(str+start), *(str+end));
        start++;
        end--;
    }
}
 
// Implementation of itoa()
char* itoa(int num, char* str, int base)
{
    int i = 0;
    bool isNegative = false;
 
    /* Handle 0 explicitely, otherwise empty string is printed for 0 */
    if (num == 0)
    {
        str[i++] = '0';
        str[i] = '\0';
        return str;
    }
 
    // In standard itoa(), negative numbers are handled only with 
    // base 10. Otherwise numbers are considered unsigned.
    if (num < 0 && base == 10)
    {
        isNegative = true;
        num = -num;
    }
 
    // Process individual digits
    while (num != 0)
    {
        int rem = num % base;
        str[i++] = (rem > 9)? (rem-10) + 'a' : rem + '0';
        num = num/base;
    }
 
    // If number is negative, append '-'
    if (isNegative)
        str[i++] = '-';
 
    str[i] = '\0'; // Append string terminator
 
    // Reverse the string
    reverse(str, i);
 
    return str;
}
 
// Driver program to test implementation of itoa()
int main()
{
    char str[100];
    cout << "Base:10 " << itoa(1567, str, 10) << endl;
    cout << "Base:10 " << itoa(-1567, str, 10) << endl;
    cout << "Base:2 " << itoa(1567, str, 2) << endl;
    cout << "Base:8 " << itoa(1567, str, 8) << endl;
    cout << "Base:16 " << itoa(1567, str, 16) << endl;
    return 0;
}

Nguồn: http://www.geeksforgeeks.org/implement-itoa/

Thai Hoc Nguyen viết 18:22 ngày 30/09/2018

Sau 1 dòng lệnh nhỏ nhỏ là 1 sự vĩ đại !!

Bài liên quan
0