If you are primarily a software engineer, you can think of Verilog as using internal copies of the assigned variables within the always block. In implementation terms, the "internal variables" are not really there, but it is never the less a good way of visualising how it works.
Consider the following code:
reg [3:0] a, b;
// For blocking Assignment
always @ (posedge clk) begin
a = a + 1;
if (a) begin
$display("%t: a = %d", $time, a);
end
end
// For non-blocking Assignment
always @ (posedge clk) begin
b <= b + 1;
if (b) begin
$display("%t: b = %d", $time, b);
end
end
This is effectively performed as:
reg [3:0] a, b;
// For blocking Assignment
always @ (posedge clk) begin
var a_int = a;
a_int = a_int + 1;
if (a_int) ...
a = a_int;
end
// For non-blocking Assignment
always @ (posedge clk) begin
var b_int = b;
b_int = b + 1;
if (b) ...
b = b_int;
end
Notice how non-blocking statements cause any calculations to be performed on the external (global if you will) variable. However blocking statements cause the calculations to be performed using the internal (local) variable.
At the end of the always block, the resulting value of the internal variable is assigned back to the external one.
In your case, you are using non-blocking assignments for count, so your calculations will use the external variable, which will contain the "old" value, and not the "new" incremented value.
As you become more familiar, you start instead thinking in terms of hardware as @Oldfart describes.
Side note: This is why it is a bad idea to mix blocking and non-blocking. You end up calculating on an unpredictable combination of internal and external values, which can result in very different synthesis vs simulation results.
You can test the above code with a very simple testbench:
reg clk;
... Example code here ...
initial begin
a = 0;
b = 0;
clk = 1'b0;
#10;
clk = 1'b1;
#10;
clk = 1'b0;
#10;
clk = 1'b1;
#10;
clk = 1'b0;
end
This will print out:
10: a = 1
30: a = 2
30: b = 1

Notice how the a output is printed immediately at the first rising edge, whist the b output is printed at the next rising edge.