FAQ:ANSI CPP:задать значение константы в двоичном представлении — различия между версиями

Материал из Весельчак У
Перейти к: навигация, поиск
(Ветвление FAQ:ANSI CPP)
 
м (Как задать значение константы в двоичном представлении (т.е. единицами и нулями в виде битового поля)?)
 
(не показана одна промежуточная версия этого же участника)
Строка 2: Строка 2:
  
 
Мможно использовать макросы. Например:
 
Мможно использовать макросы. Например:
<pre>
+
<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
</pre>
+
</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