↑
Main Page
Bitwise NOT
Unsigned integers, on the other hand, treat the final bit just like the other bits. In this mode, the 32nd bit
doesn’t represent the sign of the number but rather the value 2
31
. Because of this extra bit, unsigned inte-
gers range in value from 0 to 4294967295. For numbers less than or equal to 2147483647, unsigned inte-
gers look the same as positive signed integers; numbers greater than 2147483647 require the use of bit 31
(which is always 0 in a signed positive integer). Unsigned integers only return the significant bits when
they are converted into a binary string.
Remember, all integer literals are stored as signed integers by default. Unsigned integers can only be cre-
ated by using one of the ECMAScript bitwise operators.
Bitwise NOT
The bitwise NOT is represented by a tilde (~) and is one of just a few ECMAScript operators related to
binary mathematics. The bitwise NOT is a three-step process:
1.
The operand is converted to a 32-bit number.
2.
The binary form is converted into its one’s complement.
3.
The one’s complement is converted back to a floating-point number.
Example:
var iNum1 = 25; //25 is equal to 00000000000000000000000000011001
var iNum2 = ~iNum1; //convert to 111111111111111111111111111100110
alert(iNum2); //outputs “-26”
The bitwise NOT essentially negates a number and then subtracts 1 from it, so 25 becomes –26. Really,
the same effect can be achieved by doing this:
var iNum1 = 25;
var iNum2 = -iNum1 – 1;
alert(iNum2); //outputs “-26”
Bitwise AND
The bitwise AND operator is indicated by the ampersand (
&
) and works directly on the binary form of
numbers. Essentially, bitwise AND lines up the bits in each number and then, using the following rules,
performs an AND operation between the two bits in the same position:
Bit from First Number Bit from Second Number
Result
1
1
1
1
0
0
0
1
0
0
0
0
For example, if you wanted to AND the numbers 25 and 3 together, the code looks like this:
39
ECMAScript Basics
05_579088 ch02.qxd 3/28/05 11:35 AM Page 39
Free JavaScript Editor
Ajax Editor
©
→ R7