c++ char型转换成二进制数的程序

我写了这个程序
#include <iostream>
using namespace std;
int main()
{
char a;
int B,C,D,E,F,G,H,I,b,c,d,e,f,g,h,i;
cout << "输入一个字符" << endl;
cin>>a;
B=a/2,b=a%2;
C=B/2,c=B%2;
D=C/2,d=C%2;
E=D/2,e=D%2;
F=E/2,f=E%2;
G=F/2,g=F%2;
H=G/2,h=G%2;
if(B<2) cout<<"二进制表示为"<<0<<0<<0<<0<<0<<0<<1<<b<<endl;
else if(C<2) cout<<"二进制表示为"<<0<<0<<0<<0<<0<<1<<c<<b<<endl;
else if(D<2) cout<<"二进制表示为"<<0<<0<<0<<0<<1<<d<<c<<b<<endl;
else if(E<2) cout<<"二进制表示为"<<0<<0<<0<<1<<e<<d<<c<<b<<endl;
else if(F<2) cout<<"二进制表示为"<<0<<0<<1<<f<<e<<d<<c<<b<<endl;
else if(G<2) cout<<"二进制表示为"<<0<<1<<g<<f<<e<<d<<c<<b<<endl;
else if(H<2) cout<<"二进制表示为"<<1<<h<<g<<f<<e<<d<<c<<b<<endl;
else cout<<"二进制表示为"<<1<<1<<1<<1<<1<<1<<1<<1<<endl;
system("pause");
}
为什么结果不对?我是大一新生···

有没有必要这样写暂不说,学手时怎么写都可以,只要正确。你这里有个隐形错误:C++中cin >>是自动判断变量类型的,a声明的是char型,那么cin >> a;中a接收的是”字符“而不是“数”,即当你输入1时,a=0x31而并不是a=1,所以后面算法就都错误了。追问

请问应该怎么改正呢··

追答

不是已经说明白了吗?既然声明的a是char型不合适,那就声明为int型啊,即把char a;改为int a;就可以了。或者在cin >> a;后加一句a=a-'0';,把“字符”变成数字也可以啊……

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-10-04
我觉得有一点点小错吧,没有判断00000000和00000001,从0000001b就开始了
修改为:加上一句话而已
H=G/2,h=G%2;
if(a<2) cout<<"二进制表示为"<<0<<0<<0<<0<<0<<0<<0<<b<<endl;
if(B<2) cout<<"二进制表示为"<<0<<0<<0<<0<<0<<0<<1<<b<<endl;
或者:
H=G/2,h=G%2;
I=H/2,i=H%2;//加上这一句
cout<<"二进制表示为"<<i<<h<<g<<f<<e<<d<<c<<b<<endl;//直接输出,不做判断

自己测试过,感觉没有什么问题,思路也正确,不知道你说的错在哪里?能不能告诉我你的输入输出情况
第2个回答  2013-10-04
你没有必要这样的,一个char只有8位,你要想知道某位是0还是1,只需要用位操作就可以实现:
char a = 0;
cin>>a;
char bitarray[8] = { 0 };
for ( int i=8; i>=1; --i )
{
if ( ( a >>(i-1) ) & 0x01 == 1 )

{
bitarray[8-i] = 1;
}
}
cout<<bitarray<<endl;追问

但是我们还没有学什么函数啊循环之类的 只学过取余

追答

那你可以把代码写的简洁一点,不要用abcd什么的,用一个数组,然后一位一位判断是0还是1,也是可以的,你可以从数组下表为7的开始使用,这样就不会反,最后输出的时候也不用判断,直接输出数组就可以了

第3个回答  2019-03-07
我觉得有一点点小错吧,没有判断00000000和00000001,从0000001b就开始了
修改为:加上一句话而已
H=G/2,h=G%2;
if(a<2)
cout<<"二进制表示为"<<0<<0<<0<<0<<0<<0<<0<
评论
0
0
加载更多
第4个回答  2013-10-04
程序能写成这样,真厉害!
不知道,你所说的错是什么意思?追问

但是我们还没有学什么函数啊循环之类的 只学过取余
我觉得算法是没有问题的 但是输出结果不对啊··

追答

我一直也在思考你的做法,既然都除了,你就直接输出:
cout<<"二进制表示为"<<H%2<<h<<g<<f<<e<<d<<c<<b<<endl;

//这里要注意的是超过127的数就是负数了

system("pause");
return 0; //C++有要求
}

c++ char型转换成二进制数的程序
有没有必要这样写暂不说,学手时怎么写都可以,只要正确。你这里有个隐形错误:C++中cin >>是自动判断变量类型的,a声明的是char型,那么cin >> a;中a接收的是”字符“而不是“数”,即当你输入1时,a=0x31而并不是a=1,所以后面算法就都错误了。

c++ char型转换成二进制数的程序
有没有必要这样写暂不说,学手时怎么写都可以,只要正确。你这里有个隐形错误:C++中cin >>是自动判断变量类型的,a声明的是char型,那么cin >> a;中a接收的是”字符“而不是“数”,即当你输入1时,a=0x31而并不是a=1,所以后面算法就都错误了。

C++实现十六进制的char型数组转换成二进制
\/\/ toBin, 化16-进制数字 szh为2-进制数字 szb. 仅转化 Hex, Oct. 0xca 等等必须写作 0xCA.TCHAR* toBin(const TCHAR*szh, TCHAR*szb, int B=4){ if(!szh) return 0L;if( !(B==4|| B== 3) ){ MessageBox(0,"仅转化Hex,Oct!","toBin",0); return szb; } const TCHAR*p=...

使用C++语法将字符串类型转换成二进制类型,具体算法。
const char *str1=str.c_str();\/\/返回c风格字符串 vector<int> bytes;\/\/顺序容器,如果此处不用的话 你可以定义一个大的空间存储,也可以用动态分配空间 int i=0;while(*(str1+i)!=0){ int j=*(str1+i)-48;\/\/char数字转换成int型 bytes.push_back(j);\/\/加入容器中 ++i;} \/\/...

C++用栈编写十进制转化为二进制
十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。include <iostream...

C++编程 将字符串转换为二进制码输出
可以定义一个函数,实现把一个字符转换为二进制码输出。在函数中,先将1左移7位,就可以得到二进制值10000000,再将此值与一个字符“按位与”,然后判断其值是否为0。不为0就输出1,否则就输出0。类似的操作做8次,就可以输出一个字节的8位二进制码了。include<stdio.h> void prt(char c){int...

用C++如何把一个字符串转化为二进制数
字符串DATA到int很简单,就一句话。int到二进制数,就要算了。代码十几二十句吧 字符串到整型 include <stdlib.h> include <stdio.h> int main(){ char a[] = "-100" ;int c ;c = atoi( a ) ; \/\/这句就是转化了 printf("c = %d\\n", c) ;return 0;} ...

C++用栈编写十进制转化为二进制
十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。include <iostream...

C++如何将一个char变量按二进制输出
这样写任何类型变量都可以二进制输出 include <math.h> include <iostream> using namespace std;void func( void *pBuffer, int nSize ){ unsigned char *pTemp = (unsigned char*)pBuffer;int i, j, nResult;for ( i = ...

c++怎么把一个十进制数转换成二进制,并计算二进制数最长连续1和0的长 ...
很简单。如果这个十进制数的值在 C\/C++ 语言本身所支持的范围内,如 char, short, int, long 之类,只需循环 N 次就能得到二进制值。这里的 N 等于数据类型的位数,如 char=8,short=16, int=32, long=32。转换的方法就是直接判断数据的每一位,示例代码(假定要转换一个值在0~4294967295之间...

相似回答