Bloomberg LP Interview Question Financial Software Developers


Country: United States
Interview Type: In-Person


Comment hidden because of low score. Click to expand.
9
of 15 vote

The behaviour of this type of self-assignment is undefined and dependent on the compiler implementation. So, the result may be either 0, or 10, or even a not-compilable code. The undefined behaviour happens due to missing sequence point in the evaluation of expression "count = count++;"
You can read it @en.cppreference.com/w/cpp/language/eval_order

- ashot madatyan on May 25, 2012 | Flag Reply
Comment hidden because of low score. Click to expand.
2
of 2 vote

Undefined behavior!

- Rajendra on May 25, 2012 | Flag Reply
Comment hidden because of low score. Click to expand.
2
of 2 vote

As far as I know that code is equivalent to

int count = 0;
for(int i=0; i < 10 ; ++i){ count = count; count = count + 1;}
std::cout << count;

so I expect to see 10 on std::cout;

- Albino on December 14, 2012 | Flag Reply
Comment hidden because of low score. Click to expand.
1
of 3 vote

ouput will be 10
we can write count=count++; as two steps i.e.
count=count;
count=count+1;

- maverick on May 25, 2012 | Flag Reply
Comment hidden because of low score. Click to expand.
1
of 1 vote

I'm a java guy but here goes. Since there are no braces to identify the block of code in the for loop, the count = count++; statement is the only statement part of the for loop. So count goes from 1 (count being initially o, count++ is 1) to 10 (the last value for count is 9, so count++ is 10) The output of the code is 10.

- Leon Bland on May 28, 2012 | Flag Reply
Comment hidden because of low score. Click to expand.
1
of 1 vote

G++ compiler gives output as 10. However I am not sure why people are calling the behavior as undefined

- crystal.rishi2 on October 18, 2012 | Flag Reply
Comment hidden because of low score. Click to expand.
1
of 1 vote

int count = 0;
40117e: c7 44 24 0c 00 00 00 movl $0x0,0xc(%esp)
401185: 00
int res = 0;
401186: c7 44 24 08 00 00 00 movl $0x0,0x8(%esp)
40118d: 00
res = count++;
40118e: 8b 44 24 0c mov 0xc(%esp),%eax
401192: 89 44 24 08 mov %eax,0x8(%esp)
401196: 83 44 24 0c 01 addl $0x1,0xc(%esp)
res = ++count;
40119b: 83 44 24 0c 01 addl $0x1,0xc(%esp)
4011a0: 8b 44 24 0c mov 0xc(%esp),%eax
4011a4: 89 44 24 08 mov %eax,0x8(%esp)
count = count++;
4011a8: 83 44 24 0c 01 addl $0x1,0xc(%esp)
count = ++count;
4011ad: 83 44 24 0c 01 addl $0x1,0xc(%esp)

My friend and I did some research about this question with asm. We found for res = count++, the asm does that:
temp = count;
res = count;
count = count +1;
if we say count = count ++, compiler will optimize this 3 one line into one count = count +1;
I think the tricky reason that confuses ppl comes from how we implement operator ++(int) overload for class. We would copy the object, increase the object, then return the old obj for return and assignment. But for primary type, compiler copy, assign and then increase. That's a good question to understand the primary type's difference from the operator overload for class.

- Anonymous on November 16, 2012 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 vote

10

- Mohamed Gaber on May 25, 2012 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 votes

why not 0?

if I do

int i=0, j;

j = i++;

j will be 0 rather than 1

- Itcecsa on May 25, 2012 | Flag
Comment hidden because of low score. Click to expand.
0
of 0 votes

try i = i++; you will find the surprise

- haha on November 16, 2012 | Flag
Comment hidden because of low score. Click to expand.
0
of 0 vote

This is really a very good question. Thanks for the post.

- Pratik Soni on May 25, 2012 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 vote

i think the answer should be 10

- narendra agrawal on May 25, 2012 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 votes

I compiled both

count=count++

and

count =++count

with gcc version 4.1.2 both result the same output as 10.

- Subhransu on June 05, 2012 | Flag
Comment hidden because of low score. Click to expand.
0
of 0 votes

Hi, Can anyone please provide me a link from where i can buy or download gcc 4.1.2 version compiler

Thanks
Anand

- Anand on January 04, 2013 | Flag
Comment hidden because of low score. Click to expand.
0
of 0 vote

gives 10 in VC++2008

- rajib.mostafiz on June 02, 2012 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 vote

Answer should be 10.

- Pradeep on June 04, 2012 | Flag Reply
Comment hidden because of low score. Click to expand.
1
of 1 vote

It is correct, in each loop after self assignment it's value get incremented by one, and next time the updated value gets self assigned and gets incremented.

- sourav on June 06, 2012 | Flag
Comment hidden because of low score. Click to expand.
0
of 0 vote

I think its coz of precedence. Since ++(post increment) have higher precedence than =(assignment) operator..thus for the first iteration, its picks value 0 increment it to 1 and then assigns to count and it goes on.

- manishvaidya on June 23, 2012 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 vote

case( I )

#include <iostream>
using namespace std;

void main()
{
int count = 0;
for(int i=0; i < 10; ++i){
count = count++;
}

cout<<"Output of this code is: "<<endl;
std::cout << count <<endl;


}


root [0] .L main.C
root [1] main()
Output of this code is:
0

case ( II )

#include <iostream>
using namespace std;

void main()
{
int count = 0;
for(int i=0; i < 10; ++i){
count = ++count;
}

cout<<"Output of this code is: "<<endl;
std::cout << count <<endl;


}


root [0] .L main.C
root [1] main()
Output of this code is:
10

- Joanna8848 on January 15, 2013 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 votes

int i, x;

i = 2;
x = ++i;
// now i = 3, x = 3

i = 2;
x = i++;
// now i = 3, x = 2

'Post' means after - that is, the increment is done after the variable is read. 'Pre' means before - so the variable value is incremented first, then used in the expression.

- Joanna8848 on January 15, 2013 | Flag
Comment hidden because of low score. Click to expand.
0
of 0 vote

I am using g++ 4.1.2, it gives 10

- xicheng on March 05, 2013 | Flag Reply
Comment hidden because of low score. Click to expand.
-2
of 4 vote

Answer will be zero,
Because count=count++,
1step: count is zero so..count =0;
2step:count get incremented by 1,
3step:but it does not have 3 step in loop so again count is zero .
so final output is zero.
If count=++count then o/p will be 10.

- Anonymous on May 25, 2012 | Flag Reply
Comment hidden because of low score. Click to expand.
-2
of 2 vote

Answer will be 0. Since value is first used then incremented. So count=0 is tempoarily stored somewhere then incremented so count=1 but in assignment of count=count++ count is again replaced by 0. count would be 10 if ++count is used.

- Rishi on May 25, 2012 | Flag Reply
Comment hidden because of low score. Click to expand.
-2
of 2 vote

i think it will print from 0 to 9 for count.

- Soumya on June 20, 2012 | Flag Reply
Comment hidden because of low score. Click to expand.
1
of 1 vote

check the question again..

- jayram singh on September 17, 2012 | Flag
Comment hidden because of low score. Click to expand.
-2
of 2 vote

c++ standard doesnt allow writing same variable twice in an expression. It is undefined behavior or compiler error

- kraj on October 04, 2012 | Flag Reply


Add a Comment
Name:

Writing Code? Surround your code with {{{ and }}} to preserve whitespace.

Books

is a comprehensive book walking you through every aspect of getting a job at a top tech company, while focuses on software engineering interviews.

Learn More

Videos

CareerCup's interview videos give you a real-life look at technical interviews. In these unscripted videos, watch how other candidates handle tough questions and how the interviewer thinks about their performance.

Learn More

Resume Review

Most engineers make critical mistakes on their resumes -- we can fix your resume with our custom resume review service. And, we use fellow engineers as our resume reviewers, so you can be sure that we "get" what you're saying.

Learn More

Mock Interviews

Our Mock Interviews will be conducted "in character" just like a real interview, and can focus on whatever topics you want. All our interviewers have worked for Microsoft, Google or Amazon, you know you'll get a true-to-life experience.

Learn More