Announcement

Collapse
No announcement yet.

Cho em hỏi kết quả bài này tại sao ra như vậy?

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

  • [C++] Cho em hỏi kết quả bài này tại sao ra như vậy?

    Code:
    #include<stdio.h>
    #include<conio.h>
    main()
    {
    int a = 123456;
    unsigned char* pa = (unsigned char* )&a;
    for (int i = 0; i<sizeof(a); i++)
    printf("%d", *(pa+i));
    getch();
    }

  • #2
    Originally posted by lytieulong_269 View Post
    Code:
    #include<stdio.h>
    #include<conio.h>
    main()
    {
    int a = 123456;
    unsigned char* pa = (unsigned char* )&a;
    for (int i = 0; i<sizeof(a); i++)
    printf("%d", *(pa+i));
    getch();
    }
    Như vậy là như thế nào?

    Comment


    • #3
      tại sao nó ra 64 226 1 0 đó anh??

      Comment


      • #4
        unsigned char* pa = (unsigned char* )&a;
        giải thích giùm mềnh cái này với
        Be different and always different
        http://archlinuxvn.org/
        http://theslinux.org
        http://lab.infosec.xyz

        Comment


        • #5
          123456 = 64 * 1 + 226 * 256 + 1 * 65536 + 0 * 16777216 (256^3)
          Khoảng cách giữa bạn và ước mơ của bạn là bao xa ?

          Comment


          • #6
            Em mới nhập môn lập trình mà anh nói vậy sao e hiểu đc!

            Comment


            • #7
              Originally posted by lytieulong_269 View Post
              Code:
              #include<stdio.h>
              #include<conio.h>
              main()
              {
              int a = 123456;
              unsigned char* pa = (unsigned char* )&a;
              for (int i = 0; i<sizeof(a); i++)
              printf("%d", *(pa+i));
              getch();
              }
              Code này quen ghê. Bạn hỏi bạn nào đó học CNPM06 nhá, hồi chiều nay tôi có nói rồi.

              Comment


              • #8
                Originally posted by lytieulong_269 View Post
                Em mới nhập môn lập trình mà anh nói vậy sao e hiểu đc!
                Đề cập đến vấn đề này , ta đề cập tới khái niệm Endian: Endian là cách sắp xếp các nhóm byte trong bộ nhớ: có 2 loại: Big Endian và Little Endian.
                Các máy Intel dùng Little Endian.
                Và:
                -Little Edian: Sắp xếp byte thấp nhất ở vị trí đầu tiên trong ô nhớ cấp phát cho nhóm byte đó.
                -Big Endian: Sắp xếp byte cao nhất ở vị trí đầu tiền trong ô nhớ cấp phát cho nhóm byte đó.

                Giai thích kết quả trên: Ta biết số nguyên 4byte
                Và 123456= 00000000,00000001,11100010,01000000 (2) = 0 1 226 64 ( cụm 4byte ) -- Dây là cách biểu diễn trên giấy nhá.
                Và theo Little Endian thì Cụm 4 byte trên đc sắp xếp tính từ vị trí bắt đầu lưu biến a :
                64 226 1 0 = 01000000,11100010,00000001,00000000 . Nên khi bạn duyệt từng byte trong bộ nhớ :
                for (int i = 0; i<sizeof(a); i++)
                printf("%d", *(pa+i));
                +Có pa=&a;
                64 226 1 0 = 01000000,11100010,00000001,00000000 .
                Vậy:------ (pa+0)-----(pa+1)----(pa+2)-----(pa+3)--

                Im a british accent lover

                Comment


                • #9
                  Originally posted by truonganpn View Post
                  Code này quen ghê. Bạn hỏi bạn nào đó học CNPM06 nhá, hồi chiều nay tôi có nói rồi.
                  Ủa giờ anh An dạy lớp CNPM06 hả, em nghe nói thầy Toàn mà ^_^
                  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


                  • #10
                    Originally posted by 09520082 View Post
                    Ủa giờ anh An dạy lớp CNPM06 hả, em nghe nói thầy Toàn mà ^_^
                    tội nghiệp lũ nhỏ quá :P
                    Bùm, Maria Ozawa Bin Laden, chuyên gia cưa bom hàng đầu Việt Nam
                    Bùm, Maria Ozawa Bin Laden, chuyên gia cưa bom hàng đầu Việt Nam
                    Bùm, Maria Ozawa Bin Laden, chuyên gia cưa bom hàng đầu Việt Nam
                    Bùm, Maria Ozawa Bin Laden, chuyên gia cưa bom hàng đầu Việt Nam
                    ...

                    Comment


                    • #11
                      Originally posted by 09520082 View Post
                      Ủa giờ anh An dạy lớp CNPM06 hả, em nghe nói thầy Toàn mà ^_^
                      Originally posted by 08520195 View Post
                      tội nghiệp lũ nhỏ quá :P
                      Hôm nay thầy Toàn bận nên tôi đứng lớp đó một buổi.

                      Comment


                      • #12
                        Trời, sao tụi nhỏ học chi cái phức tạp đó không biết nữa.

                        Comment


                        • #13
                          Mình cũng có bài này không hiểu sao lại chạy sai. Mọi người copy về rồi chạy thử.

                          #include <stdio.h>
                          #include <conio.h>
                          #include <stdlib.h>
                          #include <string.h>
                          void menu();
                          void nhapchuoi(char s[]);
                          void xuatchuoi(char s[]);
                          int demkitutrang(char s[]);
                          int demsotu(char s[]);
                          int xoakitutrang(char s[]);
                          int xoakitubatki(char s[]);
                          int demchieudai(char s[]);
                          int luumangsovatinhtong(char s[]);
                          void main()
                          {
                          char s[200],sxl[200];
                          char readkey;
                          menu();
                          do
                          {
                          readkey= getch();
                          if (readkey==0) readkey=getch();
                          switch (readkey- (int) '0')
                          {
                          case 1: nhapchuoi(s); /*sxl=s;*/break;
                          case 2: xuatchuoi(s); break;
                          case 3: demkitutrang(s); break;
                          case 4: demsotu(s); break;
                          case 5: xoakitutrang(sxl); break;
                          case 6: xoakitubatki(sxl); break;
                          case 7: demchieudai(s); break;
                          case 8: luumangsovatinhtong(s);break;
                          case -21: break;
                          default: printf("Ban da nhap sai lua chon. Vui long chon lai!\n");
                          }
                          } while (readkey!=27);
                          getch();
                          }








                          //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////









                          void menu()
                          {
                          printf("Moi ban chon chuong trinh muon thuc hien (nhan STT tuong ung):\n\n");
                          printf("1. Nhap chuoi.\n");
                          printf("2. Xuat chuoi.\n");
                          printf("3. Dem ki tu trang trong chuoi.\n");
                          printf("4. Dem so tu cua chuoi.\n");
                          printf("5. Xoa ki tu trang trong chuoi.\n");
                          printf("6. Xoa ki tu bat ki trong chuoi.\n");
                          printf("7. Dem chieu dai cua tu dai nhat trong chuoi.\n");
                          printf("8. Loc tat ca cac so trong chuoi luu thanh mang va tinh tong mang do.\n");
                          printf("Nhan phim ESC de ket thuc.\n\n");
                          }
                          void nhapchuoi(char s[])
                          {
                          printf("1. Nhap vao mot chuoi bat ki: ");
                          gets(s);
                          printf("\n\n");
                          }
                          void xuatchuoi(char s[])
                          {
                          printf("2. Chuoi ma ban vua nhap la: %s\n",s);
                          printf("\n\n");
                          }
                          int demkitutrang(char s[])
                          {
                          int i,length,kitutrang=0;
                          length=strlen(s);
                          for (i=0;i<length;i++)
                          if (s[i]==' ') kitutrang=kitutrang+1;
                          printf("3. Chuoi ban vua nhap co %d khoang trang.\n",kitutrang);
                          printf("\n\n");
                          return kitutrang;
                          }
                          int demsotu(char s[])
                          {
                          s[strlen(s)]=' ';
                          int i,length=strlen(s),sotu=0;
                          for (i=0;i<length;i++)
                          if (s[i]!=' ' && s[i+1] == ' ') sotu= sotu+1;
                          printf("4. Chuoi ban vua nhap co %d tu.\n",sotu);
                          printf("\n\n");
                          return sotu;
                          }
                          int xoakitutrang(char s[])
                          {
                          int i,j,length=strlen(s);
                          for (i=0;i<length;i++)
                          if (s[i]!=' ');
                          else
                          {
                          for (j=i;j<length;j++) s[j]=s[j+1];
                          length=length-1;
                          i=i-1;
                          }
                          printf("5. Chuoi ban nhap sau khi da xoa khoang trang la:__%s\n",s);
                          printf("\n\n");
                          return 1;
                          }
                          int xoakitubatki(char s[])
                          {
                          char xoa;
                          int i,j,length=strlen(s),dem=0;
                          printf("6. Nhap vao ki tu can xoa trong chuoi: ");
                          scanf("%c",&xoa);
                          for (i=0;i<length;i++)
                          if (s[i]==xoa)
                          {
                          for (j=i;j<length;j++) s[j]=s[j+1];
                          length=length-1;
                          i=i-1;
                          dem=1;
                          }
                          if (dem!=0) printf("Chuoi ban nhap sau khi xoa tat ca ki tu \"%c\" la: %s\n",xoa,s);
                          printf("\n\n");
                          return 1;
                          }
                          int demchieudai(char s[])
                          {
                          int i,j,length=strlen(s),dodai[100],chiso=0,max;
                          for (i=0;i<length;i++)
                          if (s[i]==' ' && s[i+1] != ' ')
                          for (j=i;j<=length;j++)
                          if (s[j]!=' ' && s[j+1] == ' ')
                          {
                          chiso=chiso+1;
                          dodai[chiso]=j-i;
                          }
                          max=dodai[1];
                          for (i=2;i<=chiso;i++)
                          if (dodai[i]>max) max=dodai[i];
                          printf("7. Chieu dai tu dai nhat cua chuoi la : %d\n",max);
                          return 1;
                          }
                          int luumangsovatinhtong(char s[])
                          {
                          int mangso[200],i,tong=0,j=0,length=strlen(s);
                          for (i=0;i<length;i++)
                          switch (s[i])
                          {
                          case '0': case '1': case '2': case '3': case '4':
                          case '5': case '6': case '7': case '8': case '9':
                          mangso[j]=(int) s[i]-(int) '0';
                          tong= tong + mangso[j];
                          j=j+1;
                          }
                          if (j!=0)
                          {
                          printf("8. Cac so co trong chuoi duoc luu thanh mang la: \n");
                          for (i=0;i<j;i++) printf("%d ",mangso[i]);
                          printf ("\nTong cua cac so nay la: %d",tong);
                          }
                          else printf("8. Chuoi ban nhap khong co chu so nao ca.");
                          return 1;
                          }
                          http://picshome.com/getfile.php?id=1...ame=MySign.png

                          Comment


                          • #14
                            Originally posted by 11520473 View Post
                            #include <stdio.h>
                            Em đi mà lập topic khác. Code dài thế này thì bỏ nó lên đây: http://paste.ubuntu.com rồi dẫn link về.
                            Code chạy sai thì cũng phải nói sai như thế nào? Chạy với test nào? Kết quả code ra bao nhiêu? Kết quả đáng lý phải ra là bao nhiêu? Hỏi khơi khơi thế này chả ma nào trả lời cho đâu.

                            Comment


                            • #15
                              lỗi xuất ra màn hình

                              Nếu thử một chuỗi bất kì nhưng không phải trong chương trình menu thì nó thực hiện các hàm cắt khoảng trắng, từ bất kì rồi xuất ra đúng. Nhưng khi đem vào thực hiện dạng menu thì nó lại xuất ra kết quả từ sau khi cắt bị sai. Bị sai ở đây không phải là cắt sai mà là nó hiện thêm rất nhiều kí tự lạ ở trước và sau từ vừa cắt. Mình thật sự không hiểu sao nữa.
                              http://picshome.com/getfile.php?id=1...ame=MySign.png

                              Comment

                              LHQC

                              Collapse
                              Working...
                              X