I imagine this derives from the different formation of race-relations in those nations. Is it correct? Or is it a consequence of language and semantics?
I've searched in this subreddit with no success.
Negro means black in Portuguese, they both use the word for black in their respective languages.
Not sure why, but I also have noticed that.
In English black is the right word. In French it's noir, which is the exact translation of black.
In both, the n word is considered offensive (nègre in French).
In Portuguese, as you have stated, is the opposite.
If you call someone "preto" (black), it might sound offensive, while calling him "negro" (the n word), is the acceptable form.
BTW: Coincidentally I started a a topic at AskReddit on this subject http://www.reddit.com/r/AskReddit/comments/290f91/what_is_it_that_is_considered_racist_in_another/