Thông báo

Collapse
No announcement yet.

Giải thích hộ em mấy hàm nhỏ nhỏ(C) này với

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Giải thích hộ em mấy hàm nhỏ nhỏ(C) này với

    Em có 1 số đoạn chương trình ngắn lấy trên mạng sau mà đọc chưa hiểu,dù nó ko dài.Các bác làm với CV giải thích hộ em với,thanks.
    Code:
    putnum(unsigned int n)
    {
    	unsigned int k;
    	char s[6];
    	s[0] = n/10000+'0';
        k = n%10000;
    	s[1] = k/1000+'0';
    	k = k%1000;
    	s[2] = k/100+'0';
    	k = k%100;
    	s[3] = k/10+'0';
    	k = k%10;
    	s[4] = k%10+'0';
    	
    	for(k = 0; s[k] == '0' && k<5; k++);
    	if (k==5) k--; // if all bytes are '0', get back one position
    	do putchar(s[k++]); 
    	while (k<5);
    }
    Cho em hỏi:tại sao các s[0],...s[4] lại cần +'0' ở cuối?Sao ko có s[5] nhỉ?
    Đoạn từ vòng lặp for đến hết em ko hiểu,giải thích hộ em với.
    Hàm này thì làm gì vậy?
    Code:
    int getint()
    {
        int temp;
        temp = getchar();
        temp = temp<<8;
        temp += getchar();
        return temp;
    }

  • #2
    Theo suy luận của mình thì có thể giải thích như sau:

    putnum(unsigned int n) có chức năng đổi số nguyên n thành chuỗi để gởi từng ký tự của chuỗi số -> hàm putchar(ký tự số)

    Cho em hỏi:tại sao các s[0],...s[4] lại cần +'0' ở cuối?
    +'0' ở cuối là một phép biến đổi số thành chuỗi đơn giãn. Trong bảng mã ASCII các ký tự '0' đến '9' nằm liên tục nhau.
    Ví dụ giá trị n chia 10000 ở trên được 3, thì 3 + '0' tương đương 3 + giá trị ascii của ký tự '0' -> chính là giá trị ascii của ký tự '3'.

    Sao ko có s[5] nhỉ?
    Có thể theo tác giả chỉ lấy 5 số (s[0] đến s[4]) nên k có s[5]

    Đoạn từ vòng lặp for đến hết em ko hiểu,giải thích hộ em với.
    Đoạn này để loại bỏ các ký tự '0' ở đầu chuỗi số, ví dụ 00241 thì tăng k đến vị trí ký tự 2 (k=2)

    Hàm này thì làm gì vậy?
    Code:
    int getint()
    {
        int temp;
        temp = getchar(); -> lấy giá trị byte cao
        temp = temp<<8; -> dịch phải 8 bit
        temp += getchar(); ->cộng với giá trị byte thấp
        return temp;
    }
    Đọc vào 2 byte từ hàm getchar(), đổi thành giá trị số nguyên int

    Comment


    • #3
      Bác tintintin đã làm với AVR rồi,có thể cho em mail không.Thỉng thoảng có gì thắc mắc em hỏi.Thanks bác.

      Comment

      Về tác giả

      Collapse

      cdt Tìm hiểu thêm về cdt

      Bài viết mới nhất

      Collapse

      Đang tải...
      X