That's because j is an image that is most likely belonging to a data type that is unsigned. This means negative values are not supported and get truncated to zero. If you desire negative number support, cast the variable to a supported type that can handle this... such as double, or perhaps int8. However, I'm assuming you'll want to use this for floating point applications, so double should be fine:
function complexity2imgloop_90(filename)
j=imread(filename);
j = double(j); %// Change here
m=max(j(:));
x=m-1;
u=-x;
....
Minor Note
Using i and j as variables is very bad practice. Those are reserved for the complex variable i = sqrt(-1);, j = sqrt(-1);. Shadowing i or j is not recommended because it makes it more difficult to create complex numbers. You would essentially have to type in sqrt(-1) to facilitate the same behaviour. There are also other disadvantages to doing this.
Take a look at this Stack Overflow post by Shai Bagon for more details: Using i and j as variables in Matlab