Index: sdk/lib/core/int.dart |
diff --git a/sdk/lib/core/int.dart b/sdk/lib/core/int.dart |
index 96a6d40e6dc5654b8e2e3d5d130d52dfbf25365b..2b1b70c0737e9449bc2616c7d232bbbb1af5e428 100644 |
--- a/sdk/lib/core/int.dart |
+++ b/sdk/lib/core/int.dart |
@@ -99,6 +99,78 @@ abstract class int extends num { |
bool get isOdd; |
/** |
+ * Returns the minimum number of bits required to store this integer. |
+ * |
+ * The number of bits excludes the sign bit, which gives the natural length |
+ * for non-negative (unsigned) values. Negative values are complemented to |
+ * return the bit position of the first bit that differs from the sign bit. |
+ * |
+ * To find the the number of bits needed to store the value as a signed value, |
+ * add one, i.e. use `x.bitLength + 1`. |
+ * |
+ * x.bitLength == (-x-1).bitLength |
+ * |
+ * 3.bitLength == 2; // 00000011 |
+ * 2.bitLength == 2; // 00000010 |
+ * 1.bitLength == 1; // 00000001 |
+ * 0.bitLength == 0; // 00000000 |
+ * (-1).bitLength == 0; // 11111111 |
+ * (-2).bitLength == 1; // 11111110 |
+ * (-3).bitLength == 2; // 11111101 |
+ * (-4).bitLength == 2; // 11111100 |
+ */ |
+ int get bitLength; |
+ |
+ /** |
+ * Returns the least significant [width] bits of this integer as a |
+ * non-negative number (i.e. unsigned representation). The returned value has |
+ * zeros in all bit positions higher than [width]. |
+ * |
+ * (-1).toUnsigned(5) == 32 // 11111111 -> 00011111 |
+ * |
+ * This operation can be used to simulate arithmetic from low level languages. |
+ * For example, to increment an 8 bit quantity: |
+ * |
+ * q = (q + 1).toUnsigned(8); |
+ * |
+ * `q` will count from `0` up to `255` and then wrap around to `0`. |
+ * |
+ * If the input fits in [width] bits without truncation, the result is the |
+ * same as the input. The minimum width needed to avoid truncation of `x` is |
+ * given by `x.bitLength`, i.e. |
+ * |
+ * x == x.toUnsigned(x.bitLength); |
+ */ |
+ int toUnsigned(int width); |
+ |
+ /** |
+ * Returns the least significant [width] bits of this integer, extending the |
+ * highest retained bit to the sign. This is the same as truncating the value |
+ * to fit in [width] bits using an signed 2-s complement representation. The |
+ * returned value has the same bit value in all positions higher than [width]. |
+ * |
+ * V--sign bit-V |
+ * 16.toSigned(5) == -16 // 00010000 -> 11110000 |
+ * 239.toSigned(5) == 15 // 11101111 -> 00001111 |
+ * ^ ^ |
+ * |
+ * This operation can be used to simulate arithmetic from low level languages. |
+ * For example, to increment an 8 bit signed quantity: |
+ * |
+ * q = (q + 1).toSigned(8); |
+ * |
+ * `q` will count from `0` up to `127`, wrap to `-128` and count back up to |
+ * `127`. |
+ * |
+ * If the input value fits in [width] bits without truncation, the result is |
+ * the same as the input. The minimum width needed to avoid truncation of `x` |
+ * is `x.bitLength + 1`, i.e. |
+ * |
+ * x == x.toSigned(x.bitLength + 1); |
+ */ |
+ int toSigned(int width); |
+ |
+ /** |
* Return the negative value of this integer. |
* |
* The result of negating an integer always has the opposite sign, except |