2013-08-20 61 views
7

Tôi muốn có một cách thực sự cơ bản để in ra biểu diễn nhị phân của một char. Tôi không thể tìm thấy bất kỳ mã ví dụ nào ở bất kỳ đâu.In biểu diễn nhị phân của một char trong C

Tôi cho rằng bạn có thể làm điều đó trong một vài dòng nhưng mọi thứ tôi tìm thấy quá dài và phức tạp bằng cách sử dụng nhiều hàm tôi chưa từng sử dụng trước đây. atoi xuất hiện rất nhiều nhưng không phải là tiêu chuẩn.

Có một hàm đơn giản hay cách đơn giản để viết hàm để lấy biến char và sau đó in ra biểu diễn nhị phân?

Ví dụ: char 'x' là đối số được thực hiện bởi hàm và "x là 0111 1000" được in ra.

Đó là một bài tập ở trường nơi tôi phải nhập dữ liệu người dùng của một chuỗi và in chuỗi theo dạng nhị phân. Tôi chỉ cần để có được những điều cơ bản của chuyển đổi một char để nhị phân nhưng tôi đang đấu tranh tại thời điểm này.

+1

bạn nên đăng nỗ lực của mình ... –

+0

http://stackoverflow.com/questions/7863499/conversion-of-char-to-binary-in-c – rags

+0

http://stackoverflow.com/questions/4892579/how -to-convert-a-char-to-binary – rags

Trả lời

13

Điều bạn muốn làm là sử dụng các toán tử bitwise để mặt nạ từng bit một và in chúng vào đầu ra tiêu chuẩn.

  1. A char trong C được đảm bảo là 1 byte, vì vậy hãy lặp lại 8.
  2. Trong mỗi lần lặp lại, hãy bỏ qua bit thứ tự cao nhất.
  3. Khi bạn đã có, chỉ cần in nó vào đầu ra tiêu chuẩn.

Đây là một đâm nhanh chóng mà hy vọng làm cho tinh thần ...

main() { 
    char a = 10; 
    int i; 
    for (i = 0; i < 8; i++) { 
     printf("%d", !!((a << i) & 0x80)); 
    } 
    printf("\n"); 

    return 0; 
} 

CodePad.

Để nhận bit, tôi chuyển sang bên trái để nhận bit được đánh số (cao nhất đến thấp nhất để in dễ dàng) và sau đó che nó đi. Sau đó, tôi dịch nó sang 0 hoặc 1 với !!.

+0

Điều này là hoàn hảo, chính xác những gì tôi đã tìm kiếm! Tôi sẽ đọc trên mặt nạ các toán tử thay đổi để tôi có thể hiểu đầy đủ. Nếu bạn có thời gian, bạn có thể giải thích “mặt nạ bit thứ tự cao nhất có nghĩa là gì”. Với kiến ​​thức hiện tại của tôi, tôi không chắc chắn 100% những gì đang xảy ra trên dòng chính bên trong vòng lặp for. Cảm ơn! – user1783150

+0

@ user1783150 bit thứ tự cao là bit thứ 7, ví dụ: '1' trong' 1000000' (cũng là số '0x80' hoặc' 128'). – alex

+0

Tôi vẫn còn hơi tò mò về cách "!!" toán tử hoạt động? Nó có chuyển đổi bất kỳ số dương nào thành "1" và giữ 0 là "0" không? Một google của '"!!" nhà điều hành C 'chưa trả lại bất kỳ kết quả nào. Nó không phải là một nhà điều hành tiêu chuẩn? – user1783150

2

bạn có thể sử dụng phương pháp này

const char *byte_to_binary(int x) 
{ 
    static char b[9]; 
    b[0] = '\0'; 

    int z; 
    for (z = 128; z > 0; z >>= 1) 
    { 
     strcat(b, ((x & z) == z) ? "1" : "0"); 
    } 

    return b; 
} 

để có được biểu diễn nhị phân và in với nó

ví dụ

printf("%s\n", byte_to_binary(15)); 
1
void printBits(size_t const size, void const * const ptr) 
{ 
    unsigned char *b = (unsigned char*) ptr; 
    unsigned char byte; 
    int i, j; 

    for (i=size-1;i>=0;i--) 
    { 
     for (j=7;j>=0;j--) 
     { 
      byte = b[i] & (1<<j); 
      byte >>= j; 
      printf("%u", byte); 
     } 
    } 
    puts(""); 
} 

int main(int argv, char* argc[]) 
{ 
     int i = 23; 
     uint ui = UINT_MAX; 
     float f = 23.45f; 
     printBits(sizeof(i), &i); 
     printBits(sizeof(ui), &ui); 
     printBits(sizeof(f), &f); 
     return 0; 
} 
0

Hãy thử điều này: -

#include <limits.h> 
char *chartobin (unsigned char c) 
{ 
    static char bin[CHAR_BIT + 1] = {0}; 
    int i; 
    for(i = CHAR_BIT - 1; i >= 0; i--) 
    { 
     bin[i] = (c % 2) + '0'; 
     c /= 2; 
    } 
    return bin; 
} 
Các vấn đề liên quan