c语言小技巧

打印二进制数

 

void printBinary(unsigned int n) {
    int i;
    for (i = sizeof(n)*8-1; i >= 0; i--) {  // 遍历整数的每一位
        if ((n >> i) & 1) {  // 如果该位为 1,则输出字符 '1'
            printf("1");
        } else {  // 如果该位为 0,则输出字符 '0'
            printf("0");
        }
    }
    printf("\n");
}

有符号版本

void print_binary(int  n){
    int i, mask;
    if (n < 0) {  // 如果是负数,则先将其转换为补码
        n = -n ;  // 先取反,再减去 1
        printf("1");  // 输出符号位 '1'
    } else {
        printf("0");  // 输出符号位 '0'
    }
//    mask = 1 << (sizeof(int)*8-1);  // 初始化 mask 变量
//    for (i = 0; i < sizeof(int)*8; i++) {  // 遍历整数的每一位
//        if (n & mask) {  // 如果该位为 1,则输出字符 '1'
//            printf("1");
//        } else {  // 如果该位为 0,则输出字符 '0'
//            printf("0");
//        }
//        mask >>= 1;  // 将 mask 右移一位,准备判断下一位
//    }
//    printf("\n");

    for (int j = sizeof(n)*8-2; j >=0; --j) {
        if((n>>j)&1){
            printf("1");
        }else{
            printf("0");
        }
    }
};

 


c语言函数 实现任意多个数相加

#include <stdio.h>
#include <stdarg.h>
double sum(int count, ...) {
    double sum = 0;
    va_list args;
    va_start(args, count);
    for (int i = 0; i < count; i++) {
        sum += va_arg(args, double);
    }
    va_end(args);
    return sum;
}
int main() {
    double result = sum(5, 1.0, 2.0, 3.0, 4.0, 5.0);
    printf("The result is: %f\n", result);
    return 0;
}

上面的程序怎么去掉count

#include <stdio.h>
#include <stdarg.h>
double sum(double arg, ...) {
    double sum = arg;
    va_list args;
    va_start(args, arg);
    double num;
    while ((num = va_arg(args, double)) != 0) {
        sum += num;
    }
    va_end(args);
    return sum;
}
int main() {
    double result = sum(1.0, 2.0, 3.0, 4.0, 5.0, 0);
    printf("The result is: %f\n", result);
    return 0;
}

 

 

posted on 2023-04-05 10:53  shenhshihao  阅读(16)  评论(0编辑  收藏  举报

导航