C++输出二进制、十进制、八进制和十六进制以及左移右移运算符的总结

论坛 期权论坛 脚本     
匿名技术用户   2020-12-29 02:11   95   0
#include <iostream>  
//#include <bitset>  
  
using namespace std;  
  
int main(void)  
{  
    int i,j,k,l;  
    cout<<"Input i(oct),j(hex),k(hex),l(dec):"<<endl;  
    cin>>oct>>i;  //输入为八进制数  
    cin>>hex>>j;  //输入为十六进制数  
    cin>>k;   //输入仍为十六进制数  
    cin>>dec>>l; //输入为十进制数  
    cout<<"hex:"<<"i = "<<hex<<i<<endl;  
    cout<<"dec:"<<"j = "<<dec<<j<<'\t'<<"k = "<<k<<endl;  
    cout<<"oct:"<<"l = "<<oct<<l;  
    cout<<dec<<endl;  //恢复十进制数输出状态  
    return (0);  
} 

运行结果:


思考与提示

1. 在接收输入时,必须在cin中指明数制,否则从键盘输入时,不认八进制和十六进制数开头的0和0x标志。指明后可省略0和0x标志。

如下面的输入输出结果:


2. 进制控制只适用于整型变量,不适用于实型和字符型变量。

3. 输入数据的格式、个数和类型必须与cin中的变量一一对应,否则不仅使输入数据错误,而且影响后面其他数据的正确输入。

4. cincout指明数制后,该数制将一直有效,直到重新指明使用其他数制。

下面是C++中二进制输出的总结

#include<iostream>
#include<list>
#include<bitset>
using namespace std;
//递归输出二进制函数。
 void BinaryRecursion(int n)
 {
  int a;
  a = n % 2;
  n = n >> 1;
  
  if(0 != n)
  {
   BinaryRecursion(n);
  }
  cout << a ;
 }
//使用容器转换二进制
 void BinaryVector(int n)
 {
  list<int>L;
  int temp = n;
  while(0 != temp)
  {
   L.push_front(temp % 2);
   temp = temp >> 1;
  }
  for(list<int>::iterator iter = L.begin(); iter != L.end(); iter++)
  {
   cout << *iter;
  }
  cout << endl;
 }
//逐位与1做运算
 void Binarycout(int n)
 {
  for(int i = 31; i >= 0; i--)
   cout << ((n >> i)&1);
  cout << endl;
 }
//利用bitset转换成二进制。
 void Binarybitset(int n)
 {
  cout << bitset<sizeof(int)*8>(n);
  cout << endl;
 }
int main()
{
 int i = 1047;
 int j = i >> 2;
 int k = i << 2;
 cout << "使用BinaryRecursion:" << endl;
 BinaryRecursion(i);
 cout << endl;
 BinaryRecursion(j);
 cout << endl;
 BinaryRecursion(k);
 cout << endl;
 cout << endl;
 cout << "使用BinaryVector:" << endl;
 BinaryVector(i);
 BinaryVector(j);
 BinaryVector(k);
 cout << endl;
 cout << "使用Binarycout:" << endl;
 Binarycout(i);
 Binarycout(j);
 Binarycout(k);
 cout << endl;
 cout << "使用Binarybitset:" << endl;
 Binarybitset(i);
 Binarybitset(j);
 Binarybitset(k);
 return 0;
}

输出为:


下面介绍一下c++中的左移右移运算符

移位运算包含“逻辑移位”(logical shift)和“算术移位”(arithmetic shift)。

逻辑移位:移出去的位丢弃,空缺位(vacant bit)用 0 填充。

算术移位:移出去的位丢弃,空缺位(vacant bit)用“符号位”来填充,所以一般用在右移运算中。

c++中,整数分有符号数和无符号数两种,对于这两种数做左移、右移运算,稍有区别:

1、如果是无符号数,不管是左移还是右移都是“逻辑移位”

例如,分别对无符号数 179 做左移、右移操作的结果,


2、如果是有符号数,

2a,如果是做左移运算,那么做的是“逻辑移位”,同 1中无符号数的左移。

2b,如果是做右移运算,那么做的是“算术移位”。


对于当前的大多数c/c++编译器来说,都是按照上面所讲实现的。

注:因为负数在内存中是以补码形式存储,本文中介绍的进制转换只适用于无符号数。


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP