Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: [C] In số dưới dạng nhị phân

  1. #1
    Ngày gia nhập
    07 2006
    Nơi ở
    Hà nội
    Bài viết
    204

    Mặc định [C] In số dưới dạng nhị phân

    Cho em hỏi làm sao mà in ra 1 xâu 1 số dưới dạng nhị phân

  2. #2
    Ngày gia nhập
    07 2006
    Bài viết
    121

    ý cậu hỏi mình không hiểu cho lắm ?

  3. #3
    Ngày gia nhập
    09 2006
    Bài viết
    12

    có lẽ là vầy

    Code:
    void in(int so)
    {  
        for (int i = sizeof(so)*8 - 1 ; i>=0; i--) printf ("%d", (so >> i) & 1));
    }
    
    void in_mot_xau(void)
    {
        trong khi còn xâu
        {
            printf ("\n");
            in (lần luợt các phần tử trong xâu);
        }
    }
    Đã được chỉnh sửa lần cuối bởi def : 13-12-2006 lúc 06:14 PM.

  4. #4
    Ngày gia nhập
    12 2006
    Nơi ở
    Me Tri Ha - Ha Noi
    Bài viết
    19

    bạn nói chưa được rõ ràng lắm, nếu là làm thế nào để chuyển một số dạng thập phân sang dạng nhị phân (hoăc các cơ số khác) thì bạn có thể dùng hàm có sẵn trong C là hàm itoa:
    char *itoa(int value, char *string, int radix);
    ( Phải khai báo stdlib.h )
    Chuyển đổi số nguyên value sang chuỗi string theo cơ số radix.
    Ví dụ: int number = 12345;
    char string[25];
    itoa(number, string, 10); //chuyển đổi number sang chuỗi theo cơ số 10
    Kết quả string = "12345";
    itoa(number, string, 2); //chuyển đổi number sang chuỗi theo cơ số 2
    Kết quả string = "11000000111001";

    hổng bít có đúng ý bạn hông

  5. #5
    Ngày gia nhập
    11 2006
    Bài viết
    4

    mình cũng chưa hiểu lắm về cách chuyển 1 số dạng thập phân về hệ nhị phân mong các bác giảng lại em cái.
    vd: khi nhập số 31 tại sao nó lại tương ứng với số 11111 ???

  6. #6
    Ngày gia nhập
    07 2006
    Bài viết
    166

    Mặc định [C] In số dưới dạng nhị phân

    Trích dẫn Nguyên bản được gửi bởi anhtu08
    mình cũng chưa hiểu lắm về cách chuyển 1 số dạng thập phân về hệ nhị phân mong các bác giảng lại em cái.
    vd: khi nhập số 31 tại sao nó lại tương ứng với số 11111 ???
    Xem lại toán lớp 6 phần biểu diễn một số dưới dạng cơ số 2.

  7. #7
    Ngày gia nhập
    12 2006
    Bài viết
    72

    công xem lại toán lớp 6 thà chúng ta thử nhắc lại luôn đi,
    để chuyển từ hệ cơ số 10 sang hệ cơ số 2 ta chia số đó cho 2 cho đến khi thương bằng 0 và viết số dư theo chiều xuôi-->được số nhị phân,còn chuyển từ nhị phân sang nhị phân thi làm ngược lại


    Ví dụ: chuyển 31 sang hệ nhị phân
    31:2=15 dư 1
    15:2=7 dư 1
    7:2=3 dư 1
    3:2=1 dư 1
    1:2=0 dư 1
    viết số dư từ trên xuống dưới ta được số càn chuyển
    chuyển 10011 sang hệ cơ số 10:
    đánh thứ tự các số từ 0->4 sau đó tính 2^0+0^1+0^2+2^3+2^4=25 là số cần đổi
    do không có khiếu sư phạm nên có sai sót gì trong bài viết mong các bác chỉ giáo

  8. #8
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,749

    Có nhiều cách để chuyển một số hệ decimal sang hệ binary.

    Xem qua cái code này xem. Đây là cách thông dụng.
    Code:
            int i,ibits,fbits,bit;
    	long ni; double nf;
    	char *ibin,*fbin,*tmp;
    
    	ni=(long)n; //Lay phan nguyen
    	nf=n-ni; // Lay phan thuc
    	
    	/* Chuyen phan nguyen sang he hai*/
    	tmp=(char*)malloc(sizeof(char));
    	do
    	{
    		bit=(int)ni%2;
    		ni/=2;
    		ibits++;
    		tmp=(char*)realloc(tmp,(ibits+1));
    		tmp[ibits]=bit;
    	}while(ni!=0);
    	
    	ibin=(char*)malloc(ibits);
    	ibin=reverse(tmp); //Đảo chuỗi.
    	
    	//free(tmp);
    	
    	/*Chuyen phan thap phan sang he 2*/ 
    	fbin=(char*)malloc(sizeof(char));
    	fbin[0]='.';
    	do
    	{
    		nf*=2;
    		bit=(int)(nf);
    		if(nf>=1) 
    			nf-=1;
    		fbits++;
    		fbin=(char*)realloc(fbin,(fbits+1));
    		fbin[fbits]=bit;
    	}while(nf>0E+8);
    Nếu muốn chuyển số âm thì làm thêm phần lấy bù 2 là OK.

    Còn một cách nữa cũng hay đó là tiến hành dịch và xét carry flag hoặc MSB/LSB.

    Mong mọi người góp ý thêm. Thanks!
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn