
本文共 4280 字,大约阅读时间需要 14 分钟。
������������������������������������������������������
������1���������������float���������������������������������������32������������
������������������������������������
���������������
#includevoid main() { float a; char bin[64]; printf("Input a float number: "); scanf("%f", &a); // ��������������� // ���float���������64���double unsigned char *doubleRep = (unsigned char*)&a; // ��������������������������������������� for (int i = 0; i < 64; i++) { bin[i] = (i%16 == 0) ? '0' : '0'; if (i % 16 != 0) { bin[i] += (doubleRep[i%16] >> (16 - (i %16) -4)) << (4 - (i%16)); // ������������shift���AND������ } } printf("%X\n", a);}
������2������������������������������������������������������������������������������������������
���������������
���������������
#includevoid main() { long long n; printf("Input a binary number: "); scanf("%lld", &n); char decStr[64], octStr[64], hexStr[64]; int i = 0, div = 2; // ������������������ while (n > 0) { int rem = n % 2; decStr[i] = rem + '0'; n /= 2; i++; } // ������������������ int oct = 1; while (n > 0) { int rem = n % 8; octStr[i] = rem + '0'; n /= 8; i++; } // ��������������������� int hex = 1; while (n > 0) { int rem = n % 16; hexStr[i] = (rem < 10) ? '0' + rem : 'A' + rem - 10; n /= 16; i++; } printf("���������: %s\n���������: %s\n������������: %s\n", decStr, octStr, hexStr);}
������3���������������������32���������������������
���������
���������������
#includevoid DecToBin(int a, char b[33]) { if (a == 0) { b[0] = '0'; return; } if (a > 0) { for (int i = 0; i < 32; i++) b[i] = 0; int i = 0; unsigned int p = a; while (p) { b[i++] = (p & 1) ? '1' : '0'; p >>= 1; } b[32] = '\0'; } else { for (int i = 0; i < 32; i++) b[i] = 1; b[32] = '\0'; int i = 0; int p = -a; while (p) { if (p & 1) b[i++] = '0'; else b[i++] = '1'; p >>= 1; } b[0] += 1; int carry = 1; for (int i = 0; i < 31; i++) { if (b[i] == 2) { b[i] = 0; carry = 1; } else carry = 0; if (carry) b[i+1] += 1; } for (int i = 31; i >= 0; i--) { if (b[i] > '0') printf("%d", b[i]); } }}
������4���������a*b%c������������������������������������
���������
���������������
#includeunsigned mod(unsigned a, unsigned b, unsigned c) { static unsigned char bin[32] = {1}; unsigned result = 0; unsigned carry; // ��������������� for (unsigned long long i = 0; i < c; i++) bin[i < 32 ? i : (carry ? 31 - (i - 32) : i)] |= (c & ~mask); // ������������������������ while (b != 0) { unsigned carry = (a % c) * bin[0]; a /= c; result = (result << 1) | carry; result = result % c; if (b & 1) { result = (result << 1) | a; break; } else b >>= 1; } return result;}
���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
发表评论
最新留言
关于作者
