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

Đề tài: xem hệ nhị phân của số float!!!

  1. #1
    Ngày gia nhập
    10 2008
    Bài viết
    21

    Thumbs up xem hệ nhị phân của số float!!!

    cho em hỏi tí Làm sao lấy giá trị hệ nhị phân của số có kiểu float chỉ rõ phần nào exponent ,phần nào là significand. (sử dụng các thao tác trên bit)
    ví dụ:
    có hàm dumpfloat(float *p)
    {
    float *p=&x; -> báo lỗi ko cho khai báo con trỏ kiểu float
    int *p=&x; -> thì ok ;

    }

    Giải quyết vấn đề trên như thế nào?

  2. #2
    Ngày gia nhập
    09 2007
    Bài viết
    724

    1 - x của bạn khai báo ở đâu, nó là kiểu gì vậy bạn????
    2 - cái chổ bạn nói nó báo lỗi không cho khai báo biến kiểu float là vì sao??? Bạn đã đọc kỹ cái báo lỗi của nó chưa mà kết luận một cách như vậy???

    C Code:
    1. có hàm dumpfloat(float *p)
    2. {
    3. float *p=&x; -> Ở đây khai báo biến p ở trên xuống đây khai
    4. // báo tiếp nó la làng là đúng rùi còn thắc mắc gì nữa.
    5. int *p=&x; -> thì ok ;
    6.  
    7. }

    -- ^^ chúc vui ^^---

  3. #3
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Làm vầy nè bạn :

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3.  
    4. void Parse(unsigned char ch,char *result)
    5. {
    6.     int num = (int)ch;
    7.    
    8.     for (int i=7;i>=0;i--)
    9.     {
    10.         result[i] = '0' + (num & 1);
    11.         num >> 1;
    12.     }
    13. }
    14.  
    15. void DumpFloat(float x,char *result)
    16. {
    17.     unsigned char *pch = (unsigned char *)&x;
    18.     int n = 0;
    19.  
    20.     for (int i=sizeof(float)-1;i>=0;i--)
    21.     {
    22.         Parse(pch[i],&result[n]);
    23.         n += 8;
    24.     }
    25.  
    26.     result[n] = 0;
    27. }
    28.  
    29. int main(int argc, char* argv[])
    30. {
    31.     float x = 12.3;
    32.     char result[33];
    33.  
    34.     DumpFloat(x,result);
    35.     printf("%s\n",result);
    36.  
    37.     getch();
    38.     return 0;
    39. }
    Đã được chỉnh sửa lần cuối bởi meoconlongvang : 19-10-2008 lúc 01:51 PM. Lý do: Sửa thành tính toán trên bit
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  4. #4
    Ngày gia nhập
    10 2008
    Bài viết
    21

    yêu cầu dùng các thao tác trên bit mà bạn

    +ví dụ trong chương trình có khai báo biến float x thì khi gọi dumpfloat(&x) thì sẽ in ra màn hình biểu diễn nhị phân giá trị đang lưu của x ,trong đó chỉ rõ phần nào là exponent , phần nào là significand.

  5. #5
    Ngày gia nhập
    09 2007
    Bài viết
    724

    ý tưởng nhé: bạn chuyển số đó qua chuổi. Tách chuổi thu được thành 2 chuổi 1 chuổi chứa phần nguyên, một chuổi chứa phần thập phân. sau đó đổi nó ngược lại kiểu int rồi chuyển nó sang hệ nhị phân. .

    Không biết mình hiểu "exponent" và "significand" có đúng ý bạn không???

  6. #6
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Mặc định xem hệ nhị phân của số float!!!

    ko phải vậy đâu zkday, tách chuỗi ra cũng ko thấy được cách nó biểu diễn thực sự trong bộ nhớ thế nào mà chỉ thấy được cách nó thể hiện ra màn hình. Một số thập phân bất kỳ đều được biểu diễn dưới dạng : 1.xxxxx * 10 ^ y, trong đó x là significant còn y là exponent. Mình ko nhớ rõ lắm nhưng trong bộ nhớ nó biểu diễn gồm nhiều trường : trường dấu 1 bit, dấu chấm phần động n bit, phần giá trị m bit và phần mũ là k bit.
    Đã được chỉnh sửa lần cuối bởi meoconlongvang : 19-10-2008 lúc 01:18 PM.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  7. #7
    Ngày gia nhập
    09 2007
    Bài viết
    724

    Uh. Mình nhầm. Thank mèo nhé
    chi tiết nó ở đây nè http://en.wikipedia.org/wiki/Floating_point

  8. #8
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Trích dẫn Nguyên bản được gửi bởi haba Xem bài viết
    yêu cầu dùng các thao tác trên bit mà bạn

    +ví dụ trong chương trình có khai báo biến float x thì khi gọi dumpfloat(&x) thì sẽ in ra màn hình biểu diễn nhị phân giá trị đang lưu của x ,trong đó chỉ rõ phần nào là exponent , phần nào là significand.
    - Mình đã sửa lại thành tính toán trên bit rồi đó.
    - Muốn biết vị trí và chức năng của các phần trong chuỗi bit đó thì bạn xem trang wiki mà zkday đã đưa nha.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  9. #9
    Ngày gia nhập
    07 2007
    Nơi ở
    TP.HCM
    Bài viết
    199

    số thực trong C biểu diễn dưới dạng IEEE 754
    tính từ trái qua
    bít đầu tiên là bit dấu : 0 là số dương, 1 là âm.
    8 bit tieps theo là exponent.
    23 bit còn lại là mantisa (significant)

  10. #10
    Ngày gia nhập
    10 2008
    Bài viết
    10

    Bạn meoconlongvang ơi,tui thấy bạn rành về C quá.Bạn có nick chat không.Lâu lâu có j hỏi bạn.Tui đang học về C

Các đề tài tương tự

  1. Code stack bằng danh sách liên kết viết bằng C. Sửa lỗi "cannot convert 'float' to 'float'... "
    Gửi bởi giangcoi92 trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 11
    Bài viết cuối: 28-11-2011, 10:29 PM
  2. giải thích giùm mình lỗi cannot convert from 'float' to 'float*'
    Gửi bởi hoanghiep9x trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 06-05-2011, 08:20 PM
  3. float và double trong C++: warning C4244: conversion from 'double' to 'float'
    Gửi bởi dungtimtoinua2008 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 18-03-2010, 11:25 PM
  4. cannot convert float(*)[] to float* for argument '1' to void
    Gửi bởi vanphamvn trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 10-12-2008, 05:12 PM
  5. Tạo một số float ngẫu nhiên | Tạo Random số float
    Gửi bởi md_vn trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 20
    Bài viết cuối: 06-06-2008, 11:00 AM

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