一、十进制转二进制
//十进制转二进制
string ten_to_two(const unsigned int val){
string res="";
for(int i=15;i>=0;i--){
if(val & (1<<i))
res += "1";
else
res += "0";
}
return res;
}
二、十进制转八进制
//十进制转八进制
string ten_to_eight(int val){
vector<int> vec;
string res;
while(val){
vec.push_back(val%8);
val/=8;
}
for(vector<int>::iterator it =vec.end()-1;it>=vec.begin();--it){
res+=to_string(*it);
}
return res;
}
三、十进制转十六进制
//十进制转十六进制
string ten_to_sixteen(int x){
//十进制转十六进制
int tmp1;
string res="";
vector<int> s; //存余数
while(x!=0){
tmp1 = x%16;
x/=16;
s.push_back(tmp1);
}
for(int k=s.size()-1;k>=0;k--){
if(s[k]>=10){
res += (char)(s[k]+87); //10的时候转化为'a','a'的ASCII码是97,'A':65
}else{
res += to_string(s[k]);
}
}
return res;
}
四、通过库函数实现八进制、十六进制输出
int main() {
int test = 64;
cout<<"原来的数是:"<<test<<endl;
cout<<"八进制是:"<<oct<<test<<endl;
cout<<"十六进制是:"<<hex<<test<<endl;
return 0;
}
输出:
原来的数是:64
八进制是:100
十六进制是:40
五、字母转ASCII码
int main() {
char str = 'a';
int str_asc = int(str);
cout<<str_asc<<endl;
return 0;
}
输出:97
六、精度问题
头文件:#include<iomanip>
问题:对一个整数的字符串,要求输出8位,不足8位的左边补上0。例如输入是10,则输出00000010。
int main() {
string str = "10";
cout<<setw(8)<<setfill('0')<<str<<endl;
return 0;
}
输出:
00000010
setw(n)设域宽为n个字符(默认是右对齐)
setfill(c)设填充字符为c
可以通过设置setiosflags改为左对齐
setiosflags(ios::fixed) 固定的浮点显示
setiosflags(ios::scientific)指数显示
setiosflags(ios::left) 左对齐
setiosflags(ios::right) 右对齐
setiosflags(ios::uppercase)16进制数大写输出
setiosflags(ios::lowercase)16进制数小写输出
setiosflags(ios::showpos) 强制显示符号
例1:
int main() {
double tmp = 1.32443;
cout<<"原来的数是:"<<tmp<<endl;
cout<<setiosflags(ios::fixed)<<setprecision(2)<<tmp<<endl;
return 0;
}
输出:
原来的数是:1.32443
1.32
例2:
int main() {
double tmp = 10.32443;
cout<<"原来的数是:"<<tmp<<endl;
cout<<setiosflags(ios::scientific)<<tmp<<endl;
return 0;
}
输出:
原来的数是:10.3244
1.032443e+01
例3:
int main() {
double tmp = 10.32443;
cout<<"原来的数是:"<<tmp<<endl;
cout<<setiosflags(ios::scientific)<<setprecision(2)<<tmp<<endl;
return 0;
}
输出:
原来的数是:10.3244
1.03e+01