Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
binary.h
00001 ///\file 00002 00003 /****************************************************************************** 00004 The MIT License(MIT) 00005 00006 Embedded Template Library. 00007 https://github.com/ETLCPP/etl 00008 http://www.etlcpp.com 00009 00010 Copyright(c) 2015 jwellbelove 00011 00012 Permission is hereby granted, free of charge, to any person obtaining a copy 00013 of this software and associated documentation files(the "Software"), to deal 00014 in the Software without restriction, including without limitation the rights 00015 to use, copy, modify, merge, publish, distribute, sublicense, and / or sell 00016 copies of the Software, and to permit persons to whom the Software is 00017 furnished to do so, subject to the following conditions : 00018 00019 The above copyright notice and this permission notice shall be included in all 00020 copies or substantial portions of the Software. 00021 00022 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 00023 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00024 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE 00025 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 00026 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 00027 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 00028 SOFTWARE. 00029 ******************************************************************************/ 00030 00031 #ifndef __ETL_BINARY__ 00032 #define __ETL_BINARY__ 00033 00034 ///\defgroup binary binary 00035 /// Binary utilities 00036 ///\ingroup utilities 00037 00038 #include <limits> 00039 #include <assert.h> 00040 00041 #include "platform.h " 00042 #include "type_traits.h " 00043 #include "integral_limits.h " 00044 #include "static_assert.h" 00045 #include "log.h " 00046 #include "power.h " 00047 #include "smallest.h " 00048 #include "platform.h " 00049 00050 namespace etl 00051 { 00052 //*************************************************************************** 00053 /// Maximum value that can be contained in N bits. 00054 //*************************************************************************** 00055 /// Definition for non-zero NBITS. 00056 template <const size_t NBITS> 00057 struct max_value_for_nbits 00058 { 00059 typedef typename etl::smallest_uint_for_bits<NBITS>::type value_type; 00060 static const value_type value = (value_type(1) << (NBITS - 1)) | max_value_for_nbits<NBITS - 1>::value; 00061 }; 00062 00063 /// Specialisation for when NBITS == 0. 00064 template <> 00065 struct max_value_for_nbits<0> 00066 { 00067 typedef etl::smallest_uint_for_bits<0>::type value_type; 00068 static const value_type value = 0; 00069 }; 00070 00071 template <const size_t NBITS> 00072 const typename max_value_for_nbits<NBITS>::value_type max_value_for_nbits<NBITS>::value; 00073 00074 //*************************************************************************** 00075 /// Rotate left. 00076 //*************************************************************************** 00077 template <typename T> 00078 T rotate_left(T value) 00079 { 00080 STATIC_ASSERT(etl::is_integral<T>::value, "Not an integral type"); 00081 00082 const size_t SHIFT = etl::integral_limits<typename etl::make_unsigned<T>::type>::bits - 1; 00083 00084 return (value << 1) | (value >> SHIFT); 00085 } 00086 00087 //*************************************************************************** 00088 /// Rotate left. 00089 //*************************************************************************** 00090 template <typename T> 00091 T rotate_left(T value, size_t distance) 00092 { 00093 STATIC_ASSERT(etl::is_integral<T>::value, "Not an integral type"); 00094 00095 const size_t BITS = etl::integral_limits<typename etl::make_unsigned<T>::type>::bits; 00096 distance %= BITS; 00097 const size_t SHIFT = BITS - distance; 00098 00099 return (value << distance) | (value >> SHIFT); 00100 } 00101 00102 //*************************************************************************** 00103 /// Rotate right. 00104 //*************************************************************************** 00105 template <typename T> 00106 T rotate_right(T value) 00107 { 00108 STATIC_ASSERT(etl::is_integral<T>::value, "Not an integral type"); 00109 00110 const size_t SHIFT = etl::integral_limits<typename etl::make_unsigned<T>::type>::bits - 1; 00111 00112 return (value >> 1) | (value << SHIFT); 00113 } 00114 00115 //*************************************************************************** 00116 /// Rotate right. 00117 //*************************************************************************** 00118 template <typename T> 00119 T rotate_right(T value, size_t distance) 00120 { 00121 STATIC_ASSERT(etl::is_integral<T>::value, "Not an integral type"); 00122 00123 const size_t BITS = etl::integral_limits<typename etl::make_unsigned<T>::type>::bits; 00124 distance %= BITS; 00125 const size_t SHIFT = BITS - distance; 00126 00127 return (value >> distance) | (value << SHIFT); 00128 } 00129 00130 //*************************************************************************** 00131 /// Rotate. 00132 /// Positive is left, negative is right. 00133 //*************************************************************************** 00134 template <typename T> 00135 T rotate(T value, typename etl::make_signed<size_t>::type distance) 00136 { 00137 STATIC_ASSERT(etl::is_integral<T>::value, "Not an integral type"); 00138 00139 T result; 00140 00141 if (distance > 0) 00142 { 00143 result = rotate_left(value, size_t(distance)); 00144 } 00145 else 00146 { 00147 result = rotate_right(value, size_t(-distance)); 00148 } 00149 00150 return result; 00151 } 00152 00153 //*************************************************************************** 00154 /// Reverse bits. 00155 //*************************************************************************** 00156 #if ETL_8BIT_SUPPORT 00157 uint8_t reverse_bits(uint8_t value); 00158 inline int8_t reverse_bits(int8_t value) { return int8_t(reverse_bits(uint8_t(value))); } 00159 #endif 00160 uint16_t reverse_bits(uint16_t value); 00161 inline int16_t reverse_bits(int16_t value) { return int16_t(reverse_bits(uint16_t(value))); } 00162 uint32_t reverse_bits(uint32_t value); 00163 inline int32_t reverse_bits(int32_t value) { return int32_t(reverse_bits(uint32_t(value))); } 00164 uint64_t reverse_bits(uint64_t value); 00165 inline int64_t reverse_bits(int64_t value) { return int64_t(reverse_bits(uint64_t(value))); } 00166 00167 //*************************************************************************** 00168 /// Reverse bytes. 00169 //*************************************************************************** 00170 #if ETL_8BIT_SUPPORT 00171 inline uint8_t reverse_bytes(uint8_t value) { return value; } 00172 inline int8_t reverse_bytes(int8_t value) { return value; } 00173 #endif 00174 uint16_t reverse_bytes(uint16_t value); 00175 inline int16_t reverse_bytes(int16_t value) { return int16_t(reverse_bytes(uint16_t(value))); } 00176 uint32_t reverse_bytes(uint32_t value); 00177 inline int32_t reverse_bytes(int32_t value) { return int32_t(reverse_bytes(uint32_t(value))); } 00178 uint64_t reverse_bytes(uint64_t value); 00179 inline int64_t reverse_bytes(int64_t value) { return int64_t(reverse_bytes(uint64_t(value))); } 00180 00181 //*************************************************************************** 00182 /// Converts binary to Gray code. 00183 //*************************************************************************** 00184 template <typename T> 00185 T binary_to_gray(T value) 00186 { 00187 STATIC_ASSERT(etl::is_integral<T>::value, "Not an integral type"); 00188 00189 return (value >> 1) ^ value; 00190 } 00191 00192 //*************************************************************************** 00193 /// Converts Gray code to binary. 00194 //*************************************************************************** 00195 #if ETL_8BIT_SUPPORT 00196 uint8_t gray_to_binary(uint8_t value); 00197 inline int8_t gray_to_binary(int8_t value) { return int8_t(gray_to_binary(uint8_t(value))); } 00198 #endif 00199 uint16_t gray_to_binary(uint16_t value); 00200 inline int16_t gray_to_binary(int16_t value) { return int16_t(gray_to_binary(uint16_t(value))); } 00201 uint32_t gray_to_binary(uint32_t value); 00202 inline int32_t gray_to_binary(int32_t value) { return int32_t(gray_to_binary(uint32_t(value))); } 00203 uint64_t gray_to_binary(uint64_t value); 00204 inline int64_t gray_to_binary(int64_t value) { return int64_t(gray_to_binary(uint64_t(value))); } 00205 00206 //*************************************************************************** 00207 /// Count set bits. 00208 //*************************************************************************** 00209 #if ETL_8BIT_SUPPORT 00210 uint_least8_t count_bits(uint8_t value); 00211 inline uint_least8_t count_bits(int8_t value) { return count_bits(uint8_t(value)); } 00212 #endif 00213 uint_least8_t count_bits(uint16_t value); 00214 inline uint_least8_t count_bits(int16_t value) { return count_bits(uint16_t(value)); } 00215 uint_least8_t count_bits(uint32_t value); 00216 inline uint_least8_t count_bits(int32_t value) { return count_bits(uint32_t(value)); } 00217 uint_least8_t count_bits(uint64_t value); 00218 inline uint_least8_t count_bits(int64_t value) { return count_bits(uint64_t(value)); } 00219 00220 //*************************************************************************** 00221 /// Parity. 0 = even, 1 = odd 00222 //*************************************************************************** 00223 #if ETL_8BIT_SUPPORT 00224 uint_least8_t parity(uint8_t value); 00225 inline uint_least8_t parity(int8_t value) { return parity(uint8_t(value)); } 00226 #endif 00227 uint_least8_t parity(uint16_t value); 00228 inline uint_least8_t parity(int16_t value) { return parity(uint16_t(value)); } 00229 uint_least8_t parity(uint32_t value); 00230 inline uint_least8_t parity(int32_t value) { return parity(uint32_t(value)); } 00231 uint_least8_t parity(uint64_t value); 00232 inline uint_least8_t parity(int64_t value) { return parity(uint64_t(value)); } 00233 00234 //*************************************************************************** 00235 /// Fold a binary number down to a set number of bits using XOR. 00236 //*************************************************************************** 00237 template <typename TReturn, const size_t NBITS, typename TValue> 00238 TReturn fold_bits(TValue value) 00239 { 00240 STATIC_ASSERT(integral_limits<TReturn>::bits >= NBITS, "Return type too small to hold result"); 00241 00242 const TValue mask = etl::power<2, NBITS>::value - 1; 00243 const size_t shift = NBITS; 00244 00245 // Fold the value down to fit the width. 00246 TReturn folded_value = 0; 00247 00248 // Keep shifting down and XORing the lower bits. 00249 while (value >= etl::max_value_for_nbits<NBITS>::value) 00250 { 00251 folded_value ^= value & mask; 00252 value >>= shift; 00253 } 00254 00255 // Fold the remaining bits. 00256 folded_value ^= value & mask; 00257 00258 return folded_value; 00259 } 00260 00261 //*************************************************************************** 00262 /// Sign extend. 00263 /// Converts an N bit binary number, where bit N-1 is the sign bit, to a signed integral type. 00264 //*************************************************************************** 00265 template <typename TReturn, const size_t NBITS, typename TValue> 00266 TReturn sign_extend(TValue value) 00267 { 00268 STATIC_ASSERT(etl::is_integral<TValue>::value, "TValue not an integral type"); 00269 STATIC_ASSERT(etl::is_integral<TReturn>::value, "TReturn not an integral type"); 00270 STATIC_ASSERT(etl::is_signed<TReturn>::value, "TReturn not a signed type"); 00271 STATIC_ASSERT(NBITS <= std::numeric_limits<TReturn>::digits, "NBITS too large for return type"); 00272 00273 const TReturn negative = (TReturn(1) << (NBITS - 1)); 00274 TReturn signed_value = value & ((1 << NBITS) - 1); 00275 00276 if ((signed_value & negative) != 0) 00277 { 00278 const TReturn sign_bits = ~((TReturn(1) << NBITS) - 1); 00279 signed_value |= sign_bits; 00280 } 00281 00282 return signed_value; 00283 } 00284 00285 //*************************************************************************** 00286 /// Sign extend. 00287 /// Converts an N bit binary number, where bit N-1 is the sign bit, and SHIFT 00288 /// is the right shift amount, to a signed integral type. 00289 //*************************************************************************** 00290 template <typename TReturn, const size_t NBITS, const size_t SHIFT, typename TValue> 00291 TReturn sign_extend(TValue value) 00292 { 00293 STATIC_ASSERT(etl::is_integral<TValue>::value, "TValue not an integral type"); 00294 STATIC_ASSERT(etl::is_integral<TReturn>::value, "TReturn not an integral type"); 00295 STATIC_ASSERT(etl::is_signed<TReturn>::value, "TReturn not a signed type"); 00296 STATIC_ASSERT(NBITS <= std::numeric_limits<TReturn>::digits, "NBITS too large for return type"); 00297 STATIC_ASSERT(SHIFT <= std::numeric_limits<TReturn>::digits, "SHIFT too large"); 00298 00299 const TReturn negative = (TReturn(1) << (NBITS - 1)); 00300 TReturn signed_value = (value >> SHIFT) & ((1 << NBITS) - 1); 00301 00302 if ((signed_value & negative) != 0) 00303 { 00304 const TReturn sign_bits = ~((TReturn(1) << NBITS) - 1); 00305 signed_value |= sign_bits; 00306 } 00307 00308 return signed_value; 00309 } 00310 00311 //*************************************************************************** 00312 /// Sign extend. 00313 /// Converts an N bit binary number, where bit N-1 is the sign bit, to a signed integral type. 00314 //*************************************************************************** 00315 template <typename TReturn, typename TValue> 00316 TReturn sign_extend(TValue value, const size_t NBITS) 00317 { 00318 STATIC_ASSERT(etl::is_integral<TValue>::value, "TValue not an integral type"); 00319 STATIC_ASSERT(etl::is_integral<TReturn>::value, "TReturn not an integral type"); 00320 STATIC_ASSERT(etl::is_signed<TReturn>::value, "TReturn not a signed type"); 00321 assert(NBITS <= std::numeric_limits<TReturn>::digits); 00322 00323 const TReturn negative = (TReturn(1) << (NBITS - 1)); 00324 TReturn signed_value = value & ((1 << NBITS) - 1); 00325 00326 if ((signed_value & negative) != 0) 00327 { 00328 const TReturn sign_bits = ~((TReturn(1) << NBITS) - 1); 00329 signed_value |= sign_bits; 00330 } 00331 00332 return signed_value; 00333 } 00334 00335 //*************************************************************************** 00336 /// Sign extend. 00337 /// Converts an N bit binary number, where bit N-1 is the sign bit, and SHIFT 00338 /// is the right shift amount, to a signed integral type. 00339 //*************************************************************************** 00340 template <typename TReturn, typename TValue> 00341 TReturn sign_extend(TValue value, const size_t NBITS, const size_t SHIFT) 00342 { 00343 STATIC_ASSERT(etl::is_integral<TValue>::value, "TValue not an integral type"); 00344 STATIC_ASSERT(etl::is_integral<TReturn>::value, "TReturn not an integral type"); 00345 STATIC_ASSERT(etl::is_signed<TReturn>::value, "TReturn not a signed type"); 00346 assert(NBITS <= std::numeric_limits<TReturn>::digits); 00347 00348 const TReturn negative = (TReturn(1) << (NBITS - 1)); 00349 TReturn signed_value = (value >> SHIFT) & ((1 << NBITS) - 1); 00350 00351 if ((signed_value & negative) != 0) 00352 { 00353 const TReturn sign_bits = ~((TReturn(1) << NBITS) - 1); 00354 signed_value |= sign_bits; 00355 } 00356 00357 return signed_value; 00358 } 00359 00360 //*************************************************************************** 00361 /// Count trailing zeros. bit. 00362 /// Uses a binary search. 00363 //*************************************************************************** 00364 #if ETL_8BIT_SUPPORT 00365 uint_least8_t count_trailing_zeros(uint8_t value); 00366 inline uint_least8_t count_trailing_zeros(int8_t value) { return count_trailing_zeros(uint8_t(value)); } 00367 #endif 00368 uint_least8_t count_trailing_zeros(uint16_t value); 00369 inline uint_least8_t count_trailing_zeros(int16_t value) { return count_trailing_zeros(uint16_t(value)); } 00370 uint_least8_t count_trailing_zeros(uint32_t value); 00371 inline uint_least8_t count_trailing_zeros(int32_t value) { return count_trailing_zeros(uint32_t(value)); } 00372 uint_least8_t count_trailing_zeros(uint64_t value); 00373 inline uint_least8_t count_trailing_zeros(int64_t value) { return count_trailing_zeros(uint64_t(value)); } 00374 00375 //*************************************************************************** 00376 /// Find the position of the first set bit. 00377 /// Starts from LSB. 00378 //*************************************************************************** 00379 template <typename T> 00380 uint_least8_t first_set_bit_position(T value) 00381 { 00382 return count_trailing_zeros(value); 00383 } 00384 00385 //*************************************************************************** 00386 /// Find the position of the first clear bit. 00387 /// Starts from LSB. 00388 //*************************************************************************** 00389 template <typename T> 00390 uint_least8_t first_clear_bit_position(T value) 00391 { 00392 value = ~value; 00393 return count_trailing_zeros(value); 00394 } 00395 00396 //*************************************************************************** 00397 /// Find the position of the first bit that is clear or set. 00398 /// Starts from LSB. 00399 //*************************************************************************** 00400 template <typename T> 00401 uint_least8_t first_bit_position(bool state, T value) 00402 { 00403 if (!state) 00404 { 00405 value = ~value; 00406 } 00407 00408 return count_trailing_zeros(value); 00409 } 00410 00411 //*************************************************************************** 00412 /// Gets the value of the bit at POSITION 00413 /// Starts from LSB. 00414 //*************************************************************************** 00415 template <const size_t POSITION> 00416 struct bit 00417 { 00418 typedef typename etl::smallest_uint_for_bits<POSITION + 1>::type value_type; 00419 static const value_type value = value_type(1) << POSITION; 00420 }; 00421 00422 template <const size_t POSITION> 00423 const typename bit<POSITION>::value_type bit<POSITION>::value; 00424 00425 //*************************************************************************** 00426 /// 8 bit binary constants. 00427 //*************************************************************************** 00428 enum binary_constant 00429 { 00430 b00000000 = 0, 00431 b00000001 = 1, 00432 b00000010 = 2, 00433 b00000011 = 3, 00434 b00000100 = 4, 00435 b00000101 = 5, 00436 b00000110 = 6, 00437 b00000111 = 7, 00438 b00001000 = 8, 00439 b00001001 = 9, 00440 b00001010 = 10, 00441 b00001011 = 11, 00442 b00001100 = 12, 00443 b00001101 = 13, 00444 b00001110 = 14, 00445 b00001111 = 15, 00446 b00010000 = 16, 00447 b00010001 = 17, 00448 b00010010 = 18, 00449 b00010011 = 19, 00450 b00010100 = 20, 00451 b00010101 = 21, 00452 b00010110 = 22, 00453 b00010111 = 23, 00454 b00011000 = 24, 00455 b00011001 = 25, 00456 b00011010 = 26, 00457 b00011011 = 27, 00458 b00011100 = 28, 00459 b00011101 = 29, 00460 b00011110 = 30, 00461 b00011111 = 31, 00462 b00100000 = 32, 00463 b00100001 = 33, 00464 b00100010 = 34, 00465 b00100011 = 35, 00466 b00100100 = 36, 00467 b00100101 = 37, 00468 b00100110 = 38, 00469 b00100111 = 39, 00470 b00101000 = 40, 00471 b00101001 = 41, 00472 b00101010 = 42, 00473 b00101011 = 43, 00474 b00101100 = 44, 00475 b00101101 = 45, 00476 b00101110 = 46, 00477 b00101111 = 47, 00478 b00110000 = 48, 00479 b00110001 = 49, 00480 b00110010 = 50, 00481 b00110011 = 51, 00482 b00110100 = 52, 00483 b00110101 = 53, 00484 b00110110 = 54, 00485 b00110111 = 55, 00486 b00111000 = 56, 00487 b00111001 = 57, 00488 b00111010 = 58, 00489 b00111011 = 59, 00490 b00111100 = 60, 00491 b00111101 = 61, 00492 b00111110 = 62, 00493 b00111111 = 63, 00494 b01000000 = 64, 00495 b01000001 = 65, 00496 b01000010 = 66, 00497 b01000011 = 67, 00498 b01000100 = 68, 00499 b01000101 = 69, 00500 b01000110 = 70, 00501 b01000111 = 71, 00502 b01001000 = 72, 00503 b01001001 = 73, 00504 b01001010 = 74, 00505 b01001011 = 75, 00506 b01001100 = 76, 00507 b01001101 = 77, 00508 b01001110 = 78, 00509 b01001111 = 79, 00510 b01010000 = 80, 00511 b01010001 = 81, 00512 b01010010 = 82, 00513 b01010011 = 83, 00514 b01010100 = 84, 00515 b01010101 = 85, 00516 b01010110 = 86, 00517 b01010111 = 87, 00518 b01011000 = 88, 00519 b01011001 = 89, 00520 b01011010 = 90, 00521 b01011011 = 91, 00522 b01011100 = 92, 00523 b01011101 = 93, 00524 b01011110 = 94, 00525 b01011111 = 95, 00526 b01100000 = 96, 00527 b01100001 = 97, 00528 b01100010 = 98, 00529 b01100011 = 99, 00530 b01100100 = 100, 00531 b01100101 = 101, 00532 b01100110 = 102, 00533 b01100111 = 103, 00534 b01101000 = 104, 00535 b01101001 = 105, 00536 b01101010 = 106, 00537 b01101011 = 107, 00538 b01101100 = 108, 00539 b01101101 = 109, 00540 b01101110 = 110, 00541 b01101111 = 111, 00542 b01110000 = 112, 00543 b01110001 = 113, 00544 b01110010 = 114, 00545 b01110011 = 115, 00546 b01110100 = 116, 00547 b01110101 = 117, 00548 b01110110 = 118, 00549 b01110111 = 119, 00550 b01111000 = 120, 00551 b01111001 = 121, 00552 b01111010 = 122, 00553 b01111011 = 123, 00554 b01111100 = 124, 00555 b01111101 = 125, 00556 b01111110 = 126, 00557 b01111111 = 127, 00558 b10000000 = 128, 00559 b10000001 = 129, 00560 b10000010 = 130, 00561 b10000011 = 131, 00562 b10000100 = 132, 00563 b10000101 = 133, 00564 b10000110 = 134, 00565 b10000111 = 135, 00566 b10001000 = 136, 00567 b10001001 = 137, 00568 b10001010 = 138, 00569 b10001011 = 139, 00570 b10001100 = 140, 00571 b10001101 = 141, 00572 b10001110 = 142, 00573 b10001111 = 143, 00574 b10010000 = 144, 00575 b10010001 = 145, 00576 b10010010 = 146, 00577 b10010011 = 147, 00578 b10010100 = 148, 00579 b10010101 = 149, 00580 b10010110 = 150, 00581 b10010111 = 151, 00582 b10011000 = 152, 00583 b10011001 = 153, 00584 b10011010 = 154, 00585 b10011011 = 155, 00586 b10011100 = 156, 00587 b10011101 = 157, 00588 b10011110 = 158, 00589 b10011111 = 159, 00590 b10100000 = 160, 00591 b10100001 = 161, 00592 b10100010 = 162, 00593 b10100011 = 163, 00594 b10100100 = 164, 00595 b10100101 = 165, 00596 b10100110 = 166, 00597 b10100111 = 167, 00598 b10101000 = 168, 00599 b10101001 = 169, 00600 b10101010 = 170, 00601 b10101011 = 171, 00602 b10101100 = 172, 00603 b10101101 = 173, 00604 b10101110 = 174, 00605 b10101111 = 175, 00606 b10110000 = 176, 00607 b10110001 = 177, 00608 b10110010 = 178, 00609 b10110011 = 179, 00610 b10110100 = 180, 00611 b10110101 = 181, 00612 b10110110 = 182, 00613 b10110111 = 183, 00614 b10111000 = 184, 00615 b10111001 = 185, 00616 b10111010 = 186, 00617 b10111011 = 187, 00618 b10111100 = 188, 00619 b10111101 = 189, 00620 b10111110 = 190, 00621 b10111111 = 191, 00622 b11000000 = 192, 00623 b11000001 = 193, 00624 b11000010 = 194, 00625 b11000011 = 195, 00626 b11000100 = 196, 00627 b11000101 = 197, 00628 b11000110 = 198, 00629 b11000111 = 199, 00630 b11001000 = 200, 00631 b11001001 = 201, 00632 b11001010 = 202, 00633 b11001011 = 203, 00634 b11001100 = 204, 00635 b11001101 = 205, 00636 b11001110 = 206, 00637 b11001111 = 207, 00638 b11010000 = 208, 00639 b11010001 = 209, 00640 b11010010 = 210, 00641 b11010011 = 211, 00642 b11010100 = 212, 00643 b11010101 = 213, 00644 b11010110 = 214, 00645 b11010111 = 215, 00646 b11011000 = 216, 00647 b11011001 = 217, 00648 b11011010 = 218, 00649 b11011011 = 219, 00650 b11011100 = 220, 00651 b11011101 = 221, 00652 b11011110 = 222, 00653 b11011111 = 223, 00654 b11100000 = 224, 00655 b11100001 = 225, 00656 b11100010 = 226, 00657 b11100011 = 227, 00658 b11100100 = 228, 00659 b11100101 = 229, 00660 b11100110 = 230, 00661 b11100111 = 231, 00662 b11101000 = 232, 00663 b11101001 = 233, 00664 b11101010 = 234, 00665 b11101011 = 235, 00666 b11101100 = 236, 00667 b11101101 = 237, 00668 b11101110 = 238, 00669 b11101111 = 239, 00670 b11110000 = 240, 00671 b11110001 = 241, 00672 b11110010 = 242, 00673 b11110011 = 243, 00674 b11110100 = 244, 00675 b11110101 = 245, 00676 b11110110 = 246, 00677 b11110111 = 247, 00678 b11111000 = 248, 00679 b11111001 = 249, 00680 b11111010 = 250, 00681 b11111011 = 251, 00682 b11111100 = 252, 00683 b11111101 = 253, 00684 b11111110 = 254, 00685 b11111111 = 255 00686 }; 00687 00688 enum bit_constant 00689 { 00690 b0 = 0x1, 00691 b1 = 0x2, 00692 b2 = 0x4, 00693 b3 = 0x8, 00694 b4 = 0x10, 00695 b5 = 0x20, 00696 b6 = 0x40, 00697 b7 = 0x80, 00698 b8 = 0x100, 00699 b9 = 0x200, 00700 b10 = 0x400, 00701 b11 = 0x800, 00702 b12 = 0x1000, 00703 b13 = 0x2000, 00704 b14 = 0x4000, 00705 b15 = 0x8000, 00706 b16 = 0x10000, 00707 b17 = 0x20000, 00708 b18 = 0x40000, 00709 b19 = 0x80000, 00710 b20 = 0x100000, 00711 b21 = 0x200000, 00712 b22 = 0x400000, 00713 b23 = 0x800000, 00714 b24 = 0x1000000, 00715 b25 = 0x2000000, 00716 b26 = 0x4000000, 00717 b27 = 0x8000000, 00718 b28 = 0x10000000, 00719 b29 = 0x20000000, 00720 b30 = 0x40000000, 00721 b31 = 0x80000000 00722 }; 00723 } 00724 00725 #endif 00726
Generated on Tue Jul 12 2022 14:05:39 by
