module top;
    wire [3:0] a, b, w, x, y, z;
    assign a = 4'b1111;
    assign b = 4'b0001;

    // loses upper bit
    assign w = (a + b) >> 1;

    // preserves upper bit via implicit extension
    assign y = (0 + a + b) >> 1;
    assign y = (a + b + 0) >> 1;

    // preserves upper bit via "casting"
    wire [4:0] tmp;
    assign tmp = x + b;
    assign z = tmp >> 1;
endmodule