| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5602 人关注过本帖
标题:[求助]十六进制到十进制的转换算法
只看楼主 加入收藏
chenkuanyi
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2007-4-21
收藏
 问题点数:0 回复次数:9 
[求助]十六进制到十进制的转换算法

如0xFFFF,为 -1;(呵呵,不知道正不正确)
总之,就是当最高位为 1 时,要转换成负数


如:
在最高位的符号位为正数(0)时好求,如下:
0x1111;转换如下:sum = 1*pow(16,0)+1*pow(16,1)+1*pow(16,2)+1*pow(16,3);
但当最高位的符号位为负数(1)时,例如:
0xFFFF;在二进制的转换如下,
转换成二进制:1111 1111 1111 1111,取反:0000 0000 0000 0000 再加1,成为0000 0000 0000 0001;
故sum = -1*pow(2,0);

[此贴子已经被作者于2007-5-19 19:57:57编辑过]

搜索更多相关主题的帖子: pow 十六进制 二进制 算法 十进制 
2007-05-19 10:09
I喜欢c
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:64
帖 子:1749
专家分:0
注 册:2007-3-2
收藏
得分:0 

 我是指针,却丢失了目标地址!          我是循环,却缺少了结束条件!      我是函数,却没有人来调用!   
2007-05-19 15:10
raulxxyuer
Rank: 1
等 级:新手上路
威 望:1
帖 子:178
专家分:0
注 册:2007-4-23
收藏
得分:0 

我很沒用,總是學不會遺忘,總是學不會割捨本不屬於我的東西。
2007-05-19 15:33
kisscjy
Rank: 1
等 级:新手上路
帖 子:217
专家分:0
注 册:2007-4-9
收藏
得分:0 

代码如下:(不能判断输入的有效性
即不能判断若输入"0xsss"这类的非法数字

#include<iostream>
#include<math.h>
using namespace std;

void main()
{
char a[100];
int sum=0;
int num=0;
int k=0;
cout<<"请输入16进制的一个数!"<<endl;
cin>>a;
for(int i=2;a[i]!='\0';)
{
i++;
}
i=i-1;
for(int j=i;a[j]!='x';j--)
{
switch(a[j])
{
case'0':num=0;break;
case'1':num=1;break;
case'2':num=2;break;
case'3':num=3;break;
case'4':num=4;break;
case'5':num=5;break;
case'6':num=6;break;
case'7':num=7;break;
case'8':num=8;break;
case'9':num=9;break;
case'a':num=10;break;
case'b':num=11;break;
case'c':num=12;break;
case'd':num=13;break;
case'e':num=14;break;
case'f':num=15;break;
}
sum=sum+num*pow(16,k);
k++;
}
i=0;
if(a[i]=='1') sum=-sum;
cout<<"转化为10进制为:\t";
cout<<sum<<endl;
}


每当我一晚写下70,80个程序时,你还真以为,这都是我一个人干的.....不过说真的,其实都是抄书的~~ ^@^
2007-05-19 18:18
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
for(int j=i;a[j]!='x';j--)
{
switch(a[j])
{
case'0':num=0;break;
case'1':num=1;break;
case'2':num=2;break;
case'3':num=3;break;
case'4':num=4;break;
case'5':num=5;break;
case'6':num=6;break;
case'7':num=7;break;
case'8':num=8;break;
case'9':num=9;break;
case'a':num=10;break;
case'b':num=11;break;
case'c':num=12;break;
case'd':num=13;break;
case'e':num=14;break;
case'f':num=15;break;
}
sum=sum+num*pow(16,k);
k++;
}
麻烦.
if(str[i]>='a'&&str[i]<='f')t=str[i]-'a'+10;
else t=str[i]-'0';

倚天照海花无数,流水高山心自知。
2007-05-20 00:17
kisscjy
Rank: 1
等 级:新手上路
帖 子:217
专家分:0
注 册:2007-4-9
收藏
得分:0 
谢谢楼上的赐教~~~

不胜感激

每当我一晚写下70,80个程序时,你还真以为,这都是我一个人干的.....不过说真的,其实都是抄书的~~ ^@^
2007-05-20 00:57
kisscjy
Rank: 1
等 级:新手上路
帖 子:217
专家分:0
注 册:2007-4-9
收藏
得分:0 

我明白了楼主的意思了~~
但是当我对一个数取反的时候并不能实现啊~~

16进制:0xffff=65535

int sum=65535
sum=~sum //对该位数取反
cout<<sum;

应该出来结果为0;

但是出来的结果是-65536,而不是楼主所说的0,

请问各位高手这是怎么回事

[此贴子已经被作者于2007-5-20 1:22:58编辑过]


每当我一晚写下70,80个程序时,你还真以为,这都是我一个人干的.....不过说真的,其实都是抄书的~~ ^@^
2007-05-20 01:22
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1029
专家分:177
注 册:2007-5-10
收藏
得分:0 


#include <stdio.h>

int main()
{
int n;
while(scanf(\"%x\",&n)!=EOF){
printf(\"%d\n\",n);
}
}

2007-05-20 01:24
kisscjy
Rank: 1
等 级:新手上路
帖 子:217
专家分:0
注 册:2007-4-9
收藏
得分:0 

原来iomanip.h中有这个函数的~~~


#include<iostream.h>
#include<iomanip.h>
int main()
{
int n;
cout<<"请输入一个16进制的数!"<<endl;
cin>>hex>>n;
cout<<"转化为10进制为:"<<endl;
cout<<dec<<n<<endl;
return 0;
}


每当我一晚写下70,80个程序时,你还真以为,这都是我一个人干的.....不过说真的,其实都是抄书的~~ ^@^
2007-05-20 10:48
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
收藏
得分:0 

[QUOTE]
#include <iostream>
using namespace std;

int main() {
int number;
cout << "Enter a decimal number: ";
cin >> number;
cout << "value in octal = 0"
<< oct << number << endl;
cout << "value in hex = 0x"
<< hex << number << endl;
}


[/QUOTE]
十,八,十六进制可以相互转换,但转换二进制就得自己写了


Go confidently in the  directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!
2007-05-20 12:34
快速回复:[求助]十六进制到十进制的转换算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018101 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved