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

Материал из Весельчак У
Перейти к: навигация, поиск
(Ветвление FAQ:ANSI 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))))
 
 
 
// пример:
 
// пример:

Версия 22:08, 28 июля 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