I compile the following program to a.out:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <vector>
#include <iostream>
#include <cstdio>
using namespace std;
int main(int argc, char **argv)
{
vector <string> args;
int x;
int i;
for (i = 1; i < argc; i++) args.push_back(argv[i]);
cin >> hex >> x; // This reads an integer in hex to the variable x
for (i = 0; i < args.size(); i++) {
if (x & (1 << i)) cout << args[i];
}
cout << endl;
return 0;
}
Question 1: What is the output of the following:
UNIX> echo 0x3 | ./a.out a b c d
3
into x. Only bits 0
and 1
of three are set,
so it prints the first two command line arguments:
UNIX> echo 0x3 | ./a.out a b c d ab UNIX>
Question 2: What is the output of the following:
UNIX> echo 0xc | ./a.out a b c d
0xc
into x. Bits 2
and 3
of 0xc
are set,
so it prints the last two command line arguments:
UNIX> echo 0xc | ./a.out a b c d cd UNIX>
Question 3: What is the output of the following:
UNIX> echo 0xa5 | ./a.out a b c d e f g h
8
strings. We read 0xa5
into x. The bits set in x are bits 0
, 2
, 5
and 7
(In binary,
x is 1010 0101
). So:
UNIX> echo 0xa5 | ./a.out a b c d e f g h acfh UNIX>