Announcement

Collapse
No announcement yet.

Bài này làm thế nào mấy anh?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [C++] Bài này làm thế nào mấy anh?

    Baøi 3: Cho ñoaïn chöông trình sau. Xaùc ñònh keát quaû in ra

    Code:
    #include<stdio.h>
    int swap(char a,char  b);
    main()
    {
    int x=’a’,y=256;
    swap(x,y);
    }
    int swap(char a,char b)
    {
    int tam;
    tam=a;
    a=b;
    b=tam;
    printf("%d %d",a,b);
    }
    Keát quaû in ra:
    a. Caû 3 caâu ñeàu sai
    b. 256 97
    c. Chöông trình sai cuù phaùp
    d. 97 256

  • #2
    Bỏ vào chương trình chạy phát, chẳng lẽ ko in ra kết quả hả bạn
    Có thể đại học không là cánh cửa duy nhất để vào đời, nhưng trước khi bạn đủ lớn để biết mình muốn gì thì đại học là "tấm vé" bảo đảm rằng bạn có ít nhất một giá trị.

    Comment


    • #3
      kết quả là (0 256). Bảng mã ASCII max là 255 nhưng ko hiểu tại sao khi e thay 256 bằng một giá trị lớn hơn thì chương trình vẫn cho kết quả đúng?

      Comment


      • #4
        Cả 3 câu trên đều sai.
        Theo mình thì đầu tiên khai báo x ='a', y =256
        x nhận giá trị là 97, y nhận giá trị là 256.
        Sau đó lúc bạn gọi hàm swap, thì a = (char) 97, b = (char) 256, lần lượt là a và NULL.Đến lúc in ra bạn lại ép kiểu ngược lại thành kiểu int nên kết quả là 0 và 97.
        Mình không chắc là đúng với mọi trình biên dịch, nhưng phần lớn đều hỗ trợ chuyển kiểu tự động giữa hai kiểu int và char.

        Comment


        • #5
          Originally posted by lytieulong_269 View Post
          kết quả là (0 256). Bảng mã ASCII max là 255 nhưng ko hiểu tại sao khi e thay 256 bằng một giá trị lớn hơn thì chương trình vẫn cho kết quả đúng?
          Làm sao mà ra (0 256) được, còn khi ép từ int sang char thì nó quay vòng, 256 lại là NULL, 257 thì giống như kí tự có mã là 1, cứ như thế.
          Chắc là nó chỉ dựa theo 8 bít cuối để ép kiểu nên thế, không chắc lắm.

          Comment


          • #6
            Originally posted by 08520521 View Post
            Chắc là nó chỉ dựa theo 8 bít cuối để ép kiểu nên thế, không chắc lắm.
            Tùy theo hệ thống đang sử dụng Big Endian hay Little Endian byte order:
            Big endian là các dòng máy : motorola ,Power PC của mac.... .
            Little Endian : Intel , ....

            Im a british accent lover

            Comment


            • #7
              em nhầm! Sẵn đây mấy anh giải thích hộ em tại sao kiểu int ( phạm vi biểu diễn-32768 -> 32767) nhưng khi em nhập vượt quá 2 giá trị này thì vẫn xuất ra được kết quả đó vậy ạ?

              Comment


              • #8
                Originally posted by 11520000 View Post
                em nhầm! Sẵn đây mấy anh giải thích hộ em tại sao kiểu int ( phạm vi biểu diễn-32768 -> 32767) nhưng khi em nhập vượt quá 2 giá trị này thì vẫn xuất ra được kết quả đó vậy ạ?
                trên DOS thì int là 2 byte nên có giới hạn trên, còn trên windows nó là 4 byte. Bạn thử nhập giá trị vượt quá -(2^31) -> (2^31)-1 xem có xuất được như trường hợp trên không
                Hãy là chính mình!

                Comment

                LHQC

                Collapse
                Working...
                X