目录
前言
一般大家默认二进制,八进制,十进制,十六进制分别用字符:bin, oct, dec, hex 来表示,平时各种计算机语言的默认输出的格式都是十进制的。本文将集中演示C,C++语言的二进制,八进制,十六进制输出的写法。
正文
十进制转十六进制:
C++ 版本 -> cout <<"十六进制:"<< hex <<num<<endl;
C 版本 -> printf("十六进制:%#x\n",i);
ps1: C版本 %x会直接输出16进制数,%#x 的输出会带上0x的标志,如果'X'是大写,则带的标志也是大写0X。
ps2: C++前面使用了16进制输出后,后面不加hex标志,也会将默认打印改为16进制。8进制同理。
十进制转八进制:
C++ 版本 -> cout <<"八进制:"<< oct <<num<<endl;
C 版本 -> printf("八进制:%o\n",i);
十进制转二进制:
C或者C++的printf,cout可以实现直接输出八进制,十进制,十六进制数据,但是不支持直接的二进制输出,需要调用其它库函数。
其中C语言版本借助<stdlib.h>的itoa函数,调用方式: itoa(num, s, 2)。num:要转成二进制的数;s:提前定义好的char类型数组;2:二进制基数。
C++版本借助<bitset>库,调用方式bitset<len>(num),其中 len: 二进制输出的位数,提前自定义; num:要转成二进制的数。
C++ 版本 -> cout <<"二进制:"<<bitset<10>(num) <<endl; //10是二进制位数,自定义为多少输出就是多少位,高位补0
C 版本 ->
char s[10]; //自定义二进制数的位数,输出位数是实际所需位数
itoa(num,s,2);//转成字符串,基数为2
printf("二进制:%s\n",s);
示例
定义:用不同进制输出99到102之间的数。
#include <iostream>
#include <stdio.h>
#include <bitset>
#include <stdlib.h>
using namespace std;
int main(){
char s[10]; //自定义二进制数的位数,输出位数是实际所需位数
for(int num=99;num<102;num++){
//C++版本
printf("--------------------number(dec):%d\n",num);
cout<<"----C++----"<<endl;
//cout <<"十进制:"<< dec <<num<<endl;
cout <<"十六进制:"<< hex <<num<<endl;
cout <<"八进制:"<< oct <<num<<endl;
cout <<"二进制:"<<bitset<10>(num) <<endl;//10是二进制位数,自定义为多少输出就是多少位,高位补0
cout<<"----C----"<<endl;
//C语言版本
//printf("十进制:%d\n",num);
printf("十六进制:%#x\n",num);
printf("八进制:%o\n",num);
itoa(num,s,2);//转成字符串,基数为2
printf("二进制:%s\n",s);
}
}
输出:
--------------------number(dec):99
----C++----
十六进制:63
八进制:143
二进制:0001100011
----C----
十六进制:0x63
八进制:143
二进制:1100011
--------------------number(dec):100
----C++----
十六进制:64
八进制:144
二进制:0001100100
----C----
十六进制:0x64
八进制:144
二进制:1100100
--------------------number(dec):101
----C++----
十六进制:65
八进制:145
二进制:0001100101
----C----
十六进制:0x65
八进制:145
二进制:1100101
--------------------------------
Process exited after 2.586 seconds with return value 0
请按任意键继续. . .
附录
C语言版本 printf 的 "%"定义的数据格式查询表