ý cậu hỏi mình không hiểu cho lắm ?
Cho em hỏi làm sao mà in ra 1 xâu 1 số dưới dạng nhị phân
ý cậu hỏi mình không hiểu cho lắm ?
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.
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
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.Nguyên bản được gửi bởi anhtu08
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
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.
Nếu muốn chuyển số âm thì làm thêm phần lấy bù 2 là OK.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);
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!
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 đó.Email: kevin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
Phone: 0972 89 7667
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 hoặc bị sự thiếu kỷ luật làm tiêu tan sự nghiệp.