zoukankan      html  css  js  c++  java
  • 整数转化为2进制补码(双指针的一种变形)

    #include <iostream>
    #include "algorithm" 
    #include "cmath"
    #include "string"
    #include <vector> 
    using namespace std;
    
    int main()
    {
     int sav[8]={1,2,4,8,16,32,64,128};//2^n事先存储 
     int er[8]={0};//存储二进制01 
     int phigh=7;
     int cur=0;
     int sum=100;
     while(phigh>=0){
     cur+=sav[phigh];
     if(cur>sum){
     cur-=sav[phigh];
     //cout<<"情况1"<<cur<<endl;
     phigh--;//之前忽略了这个    
     //cur=0;
     }
     else if(cur==sum){
         er[phigh]=1;
         //cout<<"情况2"<<cur<<endl;
         break;
     }
     else if(cur<sum){
         er[phigh]=1;
         //cout<<"情况3"<<cur<<endl;
         phigh--;
     }    
         
         
     }
     for(int i=0;i<8;i++){
         cout<<er[i];
     }
    
    
    }

    也可以不用事先存储:(只适合正整数求补码)

    #include <iostream>
    #include "algorithm" 
    #include "cmath"
    #include "string"
    #include <vector> 
    #include "bitset"
    using namespace std;
    
    int main()
    {
    //如果只是输出就不用事先存储了    
     int phigh=7;
     int cur=0;
     int num=0;//位数 
     int sum=100;
     while(phigh>=0){
     cur+=pow(2,phigh);
     if(cur>sum){
     cout<<0;num++;    
     cur-=pow(2,phigh);
     phigh--;//之前忽略了这个    
     }
     else if(cur==sum){
          cout<<1;num++; 
         break;
     }
     else{
         cout<<1;num++;
         phigh--;  
     }
    }
     for(int i=1;i<=8-num;i++){//默认8位 
         cout<<0;
     }cout<<endl;
       
    
    }

    常规解法:(只适合正整数求补码)

    #include <iostream>
    #include "algorithm" 
    #include "cmath"
    #include "string"
    #include <vector> 
    using namespace std;
    
    int main()
    {
    int sum=100;
    vector<int> res; 
    while(sum){
    res.push_back(sum%2);
    sum=sum/2;        
    }
    reverse(res.begin(),res.end());
    for(vector<int>::iterator it=res.begin();it!=res.end();it++)
    cout<<*it; 
    }

     库函数://正负数都可以

    #include<iostream>
    #include<cstdio>
    #include<bitset>
    using namespace std;
    int main()
    {
        bitset<8> t=-125;
        cout<<t;
        return 0;
    }    
    不一样的烟火
  • 相关阅读:
    精彩回顾 | Serverless Developer Meetup 12.04 深圳站
    Dubbo3 Triple 协议简介与选型思考
    阿里云 FaaS 架构设计与创新实践
    KubeDL 0.4.0 Kubernetes AI 模型版本管理与追踪
    shell脚本awk的用法
    case用法ping命令脚本(工作中常用的)
    linux时间与internet时间同步
    bootStrap表单验证插件的使用
    状态模式之观察者模式
    20211125
  • 原文地址:https://www.cnblogs.com/cstdio1/p/11248555.html
Copyright © 2011-2022 走看看