Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to read a binary number as input?

Is there a way for the user to input a binary number in C or C++?

If we write something like

int a = 0b1010;
std::cout << a << std::endl

Then the output comes out to be 10 (when using the appropriate compiler extensions).

but when we try to write

int n;
std::cin >> n;
int t = 0bn;

It gives us an error so can anyone suggest that how can we directly read binary number as input rather than using string to store input?

like image 381
iec2011007 Avatar asked Aug 22 '14 07:08

iec2011007


People also ask

How do you input binary numbers?

If you need to read a binary number from a string, you would roll the reverse code to what you do to print it ( std::cin >> n assumes that the input is a base 10 number, so it reads a wrong number if the input is actually intended to be in base 2).

Is it possible to read binary code?

However, just as human-readable information can be converted into binary, binary can be converted into common English without the use of computers! We can read the binary language, but to do that we need to understand the numeric system.

What is input in binary?

The Input Binary (IBN) Function Module is a signal conditioning device. that interfaces incoming field signals to the DCM. The IBN converts field. data from two different binary inputs to a voltage for use by the DCM.


4 Answers

There is a bit of confusion here, let's disentangle it a bit.

  • 0b1010 is an integer literal, a constant, compile-time integer value written in base 2. Likewise, 0xA is a literal in base 16 and 10 is in base 10. All of these refer to the same integer, it is just a different way of telling the compiler which number you mean. At runtime, in memory, this integer is always represented as a base-2 number.

  • std::cout << a; takes the integer value of a and outputs a string representation of it. By default it outputs it in base 10, but you can i.e use the std::hex modifier to have it output it in base 16. There is no predefined modifier to print in binary. So you need to do that on your own (or google it, it is a common question).

  • 0b at last, is only used to define integer literals. It is not a runtime operator. Recall, all ints are represented as base 2 numbers in memory. Other bases do not exist from a machine point of view, int is int, so there is nothing to convert. If you need to read a binary number from a string, you would roll the reverse code to what you do to print it (std::cin >> n assumes that the input is a base 10 number, so it reads a wrong number if the input is actually intended to be in base 2).

like image 175
Alexander Gessler Avatar answered Oct 18 '22 05:10

Alexander Gessler


While there is no function to read binary numbers directly, there are functions, strtox (where x represents the data type) to convert a string containing a binary number (or a number of any other base) to a numeric value.

So the solution is to first read the number as a string and then convert it.

Example:

char input[100];
char *endpointer;

<read input using either C or C++ syntax>

int n = (int) strtol(input, &endpointer, 2);
like image 35
Klas Lindbäck Avatar answered Oct 18 '22 05:10

Klas Lindbäck


To take a binary number as input, there are two ways I use frequently:

(Keynote: Take the input as string!!! use: #include <string>)

  1. The to_ulong() method of the bitset template of the bitset library
    • for this you need to include the bitset library using #include <bitset>

Example:

string s;
cin>>s; // Suppose s = "100100101"
int n = (int) bitset<64>(s).to_ulong();
cout<<n; // 293

Explore more about bitset here and about to_ulong() here.

  1. The stoi() method of the string library
    • for this you need to include the string library using #include <string>

Example:

string s;
cin>>s; // Suppose s = "100100101"
int n = stoi(s, 0, 2);
cout<<n; // 293

Explore the format of stoi() here.

like image 5
Deepam Gupta Avatar answered Oct 18 '22 05:10

Deepam Gupta


rather do it yourself:

uint32_t a = 0;

char c;
while ((c = getchar()) != '\n') { // read a line char by char
  a <<= 1;                        // shift the uint32 a bit left
  a += (c - '0') & 1;             // convert the char to 0/1 and put it at the end of the binary
}

printf("%u\n", a);
like image 1
bumfo Avatar answered Oct 18 '22 06:10

bumfo