#include <stdio.h> #include <iostream> #define MAP_LEN 16 #define HEX_SHIFT 4 #define HEX_LEN ( (int)(32/HEX_SHIFT) + 1 ) #define OCT_SHIFT 3 #define OCT_LEN ( (int)(32/OCT_SHIFT) + 1 ) #define BIN_SHIFT 1 #define BIN_LEN ( (int)(32/BIN_SHIFT) + 1 ) static char mapTable[MAP_LEN] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9','A', 'B', 'C', 'D', 'E', 'F' }; void int2other( int number, int size, int mask, int shift ) // size 为字符位数,mask 为低位掩码,shift 为右移位数 { char* result = new char[size]; int i = 0; int idx; while ( number ) { idx = number & mask; // 每次取低几位 result[ i ] = mapTable[ idx ]; number = number >> shift; // 右移 ++i; } for ( --i; i >= 0; i-- ) // 逆序输出字符即可 { printf( "%c", result[i] ); } printf("\n"); delete[] result; } void int2hex( int number ) { int2other( number, HEX_LEN, 0xF, HEX_SHIFT ); } void int2oct( int number) { int2other( number, OCT_LEN, 0x7, OCT_SHIFT ); } void int2bin( int number) { int2other( number, BIN_LEN, 0x1, BIN_SHIFT ); } int main() { int num = 123456789; printf( "%d's hex is: ", num ); int2hex(num); printf( "%d's oct is: ", num ); int2oct(num); printf( "%d's bin is: ", num ); int2bin(num); return 0; }
// main output
位操作:十进制数转为二进制,八进制,十六进制
最新推荐文章于 2024-01-23 22:21:55 发布