zoukankan      html  css  js  c++  java
  • 不使用printf系列库函数,将十进制数以十六进制数形式输出

    char *get16string(long num){     /*得到16进制形式的字符串*/
        int i = 0;
        char *buffer = (char*)malloc(11);
        char *temp;
        buffer[0] = '0', buffer[1] = 'x', buffer[10] = '\0';
        temp = buffer + 2;
        for(i=0;i<8;i++){
            temp[i] = (char)(num << 4 * i >> 28);  /*乘法优先级高于移位符, 移位符左结合*/
            temp[i] = temp[i] >= 0 ? temp[i] : temp[i] + 16; /*之所以会出现负数是因为:左移之后,若最高位为1,则编译器认为该数为负数,执行右移操作(该编译器执行算术移位)时,移入位均用1补齐*/
            temp[i] = temp[i] < 10 ? temp[i] + '0' : temp[i] - 10 + 'A' ;
        }/*从高位开始,每一次循环都取出num的二进制码中的四位,并转换成一个16进制的数值。*/
        return buffer;
    }

    int main(){
        int a = 7;
        printf("%d, test int size\n",sizeof(a));
        printf("%d, test translate\n",(char)(15<<28>>28));/*此时左移之后最高位为1*/
        printf("%d, test translate\n",(char)(15<<27>>27));/*此时左移之后最高位为0*/
        
        printf("%d, test \n",(char)(9<<28>>28));/* 1001 4位:-16*/
        printf("%d, test \n",(char)(17<<27>>27));/* 10001 5位:-32*/
        printf("%d, test \n",(char)(105<<25>>25));/* 1101001 7位:-128*/
      /*若一个n位(n为十进制数)二进制数的最高位为1,当把它的最高位认为是符号位时(把它作为补码),该数变为原值减去(2的n次方)。*/
        
        printf("456789 to Hexadecimal string:%s\n", get16string(456789));
        return 0;
    }

  • 相关阅读:
    c++ 优化的动态数组 Vector
    C++ 重载赋值运算符
    k8s中引入外部服务
    MySQL----mysql_secure_installation 安全配置向导
    elk参考连接
    限制不同的用户操作k8s的资源
    tcpdump 抓包命令使用教程
    日志管理——rsyslog、logrotate
    lsyncd配置文件详细说明
    Systemd 服务配置文件(转载)
  • 原文地址:https://www.cnblogs.com/yiru/p/2713577.html
Copyright © 2011-2022 走看看