Numerous questions regarding ARINC429 protocol I recently made significant progress in my understanding on the ARINC429 thanks to a user on this site, but I after reading more into it, I may have confused myself a little bit. Any help on any of the following questions is greatly appreciated. 


I found a specification pdf online, but it contradicts (i think) some of the other information I have gotten. The link to the pdf is here. Is it safe to assume that information is accurate enough to rely on? Assuming this book is a proper document on the ARINC429 specification
If the above is correct, is it correct that BNR data fields are represented in positive two's complement with bit 29 indicating its sign (positive/negative)? Wouldn't that just be regular binary with bit 29 indicating the values sign? 
The scale factor applies starting from the MSB (bit 28) and continues halving with each bit between 27 and 11. The actual value translation would be applying the scale factor to each sig bit and adding the values of all the sig bits together to get the final value and using bit 29 to identify if its +/-. Is any of that correct at all?
How does the resolution work? I got confused a lot by that. What is it? How does it affect the data field? 
Can somebody explain BNR format of the data field and how to translate it? I feel like I may have read too many different sources and got confused by the variance in explanations....haha
Resolutions in the A429 spec are approximate, so calculate them yourself.

Resolution = Range / (2^significant bits)

Here is one way to do it:
Load your 32 bits into a signed 32-bit integer.
Shift left 3 so the sign bit is now in bit 32.
Shift right (32-significant bits)-1 to form a 2's complement "fixed-point" number.
Convert to float and multiply by the resolution.
Done.

Note that when a signed integer is used the high bit is sign extended on the shift right.

"Fixed-point" is also known as "scaled" in some circles. It's a method of storing and performing math on a real number using an integer rather than using a float. The resolution is the weight of one lsb bit. The resolution is documented somewhere and multiplied by the integer to get the float when debugging and such, but machine code does not "know" that you think of it as a float.

The range is key to fixed -point numbers because it bounds the value. The number of significant bits affects the accuracy. You could use the wrong number of significant bits and still get a "usable"  number but with a possible loss of accuracy if you choose one that is too small. Beware that unused low bits are sometimes repurposed for status flags, etc., so don't expect these to alway be zero. Also, the specs describes an ideal standard but in the real world liberties are taken with labels repurposed as needed.

Because of the way 2's complement integers work, the max positive value possible will be the range minus the resolution. For instance, you can get exactly -180 degrees but not quite +180 degrees.