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
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);
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);
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 int
s 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).
To take binary number as input, there are two ways I use frequently:
(Key note: Take the input as string!!! use: #include<string>
)
to_ulong()
method of the bitset
template of the bitset library
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 aboutto_ulong()
here.
stoi()
method of the string
library
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.