关于C语言的位运算
发布日期:2021-05-15 08:59:37 浏览次数:22 分类:精选文章

本文共 4280 字,大约阅读时间需要 14 分钟。

������������������������������������������������������

������1���������������float���������������������������������������32������������

������������������������������������

  • ������������������
  • ��������������������� ints���������64������������������������������������������������������������������������������32���������32���������
  • ���������������4���������������������������������������������������������������������������32������������������������
  • ���������������

    #include 
    void 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������������������������������������������������������������������������������������������

    ���������������

  • ������������������������
  • ���������������������������������������������
  • ������������������������������������������������������������������������
  • ���������������

    #include 
    void 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���������������������

    ���������

  • ������������������������������������������������������
  • ������������������������������������������������������������������������������
  • ���������������

    #include 
    void 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������������������������������������

    ���������

  • ���������������������������������������
  • ���������������������������������
  • ���������������

    #include 
    unsigned 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;
    }

    ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

    上一篇:允许并列的排名
    下一篇:电脑快捷键大全 Ctrl

    发表评论

    最新留言

    留言是一种美德,欢迎回访!
    [***.207.175.100]2025年04月30日 05时17分34秒