FAQ:ANSI CPP:задать значение константы в двоичном представлении — различия между версиями
Материал из Весельчак У
RXL (обсуждение | вклад) (Ветвление FAQ:ANSI CPP) |
RXL (обсуждение | вклад) м (→Как задать значение константы в двоичном представлении (т.е. единицами и нулями в виде битового поля)?) |
||
(не показана одна промежуточная версия этого же участника) | |||
Строка 2: | Строка 2: | ||
Мможно использовать макросы. Например: | Мможно использовать макросы. Например: | ||
− | < | + | <syntaxhighlight lang="cpp"> |
// МАКРОСЫ ДЛЯ ДВОИЧНЫХ ЧИСЕЛ | // МАКРОСЫ ДЛЯ ДВОИЧНЫХ ЧИСЕЛ | ||
Строка 13: | Строка 13: | ||
// слово | // слово | ||
− | #define __b16(b16) ((WORD)((_b8(((unsigned __int64)b16) >> 32) << 8)|(_b8(b16)))) | + | #define __b16(b16) ((WORD)((_b8(((unsigned __int64)b16) >> 32) << 8)|(_b8(b16)))) |
// двойное слово | // двойное слово | ||
− | #define __b32(b16H, b16L) ((DWORD)(((__b16(b16H)) << 16)|(__b16(b16L)))) | + | #define __b32(b16H, b16L) ((DWORD)(((__b16(b16H)) << 16)|(__b16(b16L)))) |
// пример: | // пример: | ||
Строка 29: | Строка 29: | ||
dwd = __b32(0x0101010110110011, 0x0101111011010001); // 0x55B35ED1 | dwd = __b32(0x0101010110110011, 0x0101111011010001); // 0x55B35ED1 | ||
dwd = __b32(0x1000101110101010, 0x11010101); // 0x8BAA00D5 | dwd = __b32(0x1000101110101010, 0x11010101); // 0x8BAA00D5 | ||
− | </ | + | </syntaxhighlight> |
[[Category:FAQ:ANSI CPP]] | [[Category:FAQ:ANSI CPP]] |
Текущая версия на 00:58, 30 июля 2008
Как задать значение константы в двоичном представлении (т.е. единицами и нулями в виде битового поля)?
Мможно использовать макросы. Например:
// МАКРОСЫ ДЛЯ ДВОИЧНЫХ ЧИСЕЛ // байт #define _b8(b) ((BYTE)(\ (b & 0x10000000 ? 0x80 : 0) | (b & 0x01000000 ? 0x40 : 0) |\ (b & 0x00100000 ? 0x20 : 0) | (b & 0x00010000 ? 0x10 : 0) |\ (b & 0x00001000 ? 0x08 : 0) | (b & 0x00000100 ? 0x04 : 0) |\ (b & 0x00000010 ? 0x02 : 0) | (b & 0x00000001 ? 0x01 : 0))) // слово #define __b16(b16) ((WORD)((_b8(((unsigned __int64)b16) >> 32) << 8)|(_b8(b16)))) // двойное слово #define __b32(b16H, b16L) ((DWORD)(((__b16(b16H)) << 16)|(__b16(b16L)))) // пример: BYTE by; by = _b8(0x01010110); // 0x56 by = _b8(0x111); // 7 WORD w; w = __b16(0x0111011011010011); // 0x76d3 DWORD dwd; dwd = __b32(0x0101010110110011, 0x0101111011010001); // 0x55B35ED1 dwd = __b32(0x1000101110101010, 0x11010101); // 0x8BAA00D5