what is the difference between statements below?

X = Y*0;
   X = 0;

a kind of optimization problem.

I think you can see the difference right there for yourself. This has nothing to do with optimization, unless you enable the -fretarded flag on your compiler.

I've never really heard of optimization on a high level programming language. In assembly perhaps.
So I would expect that X = 0 is more efficent that X = Y * 0;
The issue lies with memory access and compution. X = 0 accesses memory once where as the X = Y * 0 access memory twice and performs a calculation. If you look at the assembly commands to carry out these operations, you'll see the actual costs involved.

You don't optimize wrong code.. You correct it..
Why would anyone do x= y * 0; if they want to set x to 0 ?!

yeah as anything timesed by 0 = 0

i suppose x = 0 would be faster than x = y * 0 as its less steps?

You might have x = y * CONSTANT where #define CONSTANT 0 is located someplace. That's how you could get that in your code.

Whether x = y * 0 is compiled to anything different than x = 0 is compiled to depends on the compiler.