Re: For Loop problem

*To*: mathgroup at smc.vnet.net*Subject*: [mg65630] Re: [mg65595] For Loop problem*From*: bsyehuda at gmail.com*Date*: Tue, 11 Apr 2006 04:04:45 -0400 (EDT)*References*: <200604100631.CAA14834@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

Hi, First to make it more efficient than using For loops , which are the slowest loops in Mathematica, you can Map the function over y y=If[#>2048,#-2048,#+2048]&/@ y Or y=Map[If[#>2048,#-2048,#+2048]&,y] will change it You didn't mention if the numbers are unsigned or signed, and in case of signed numbers are they represented in 1's complement or 2's complement or just a signed bit. 2048 is the most significant bit in your 12-bit representation, so I would expect it to be zero for number SMALLER then 2048, practically unchanged, so I wonder why do you add 2048 in this case? To the best of my understanding you are inverting the sign bit of these numbers. Is it really what you whant to do? yehuda On 4/10/06, Rob <rob at piovere.com> wrote: > > I've got to manipulate some signed 12bit integer numbers from a file and > apparently Mathematica only handles 8 and 16 bit signed numbers > (probably for a very good reason). So I bring them in as 16 bits (and > they're stored that way with a leading zero nibble) and then I have to > do the following to make sense of them. I really don't know why this > code works but it does. > > For[i = 1, i < Length[y], i++, If[y[[i]] > 2048, y[[i]] = > y[[i]] - 2048, y[[i]] = y[[i]] + 2048]]; > > So to my question: once again I had to resort to a For loop to pull this > off and I know this is a no-no. But I'm so clueless about Mathematica > that I've never come up with a more sophisticated method after a year or > so of thinking about it. Can someone help (as they usually can)? > > Thanks, Rob > >

**References**:**For Loop problem***From:*Rob <rob@piovere.com>