精华内容
下载资源
问答
  • B-10、十进制转十六进制 法一 #include<iostream> using namespace std; int main() { int n; cin >> n; cout << uppercase << hex << n << endl; return 0; ...

    B-10、十进制转十六进制


    法一

    #include<iostream>
    using namespace std;  
    int main()  
    {  
        int n;
        cin >> n;
    	cout << uppercase << hex << n << endl;  
        return 0;  
    }
    

    法二,自己实现

    #include <iostream>
    #include <list>
    using namespace std;
    
    int main() {
    	int n;
    	char str[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    	cin>>n;
    	
    	list<int> ans;
    	list<int>::iterator iter = ans.begin();
    	do{
    		ans.push_back(n % 16);
    		iter++;
    		n /= 16;
    	}while(n);
    	
    	ans.reverse();
    	iter = ans.begin();
    	while(iter != ans.end()){
    		cout<<str[*iter++];
    	}
    	
    	return 0;
    } 
    

    法三,itoa()

    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    
    int main() {
    	int n;
    	cin>>n;
    	char str[100];
    	cout << uppercase << itoa(n, str, 16); 
    	//	“int to array”还有ltoa gcvt等
    	//	需要头文件 <stdlib.h> 
    	//	此函数只能输出小写 
    	return 0;
    } 
    
    

    另附十进制各转换输出函数:

        cout << "35的8进制:" << std::oct << 35<< endl;  
        cout << "35的10进制" << std::dec << 35 << endl;  
        cout << "35的16进制:" << std::hex << 35 << endl;  
        cout << "35的2进制: " << bitset<8>(35) << endl;      
        //	<8>:表示保留8位输出
    

    B-11、十六进制转十进制


    法一,直接调用函数

    #include <iostream>
    using namespace std;
    
    int main() {
    	long long n;
    	cin >> hex >> n;
    	cout << n;
    }
    

    法二,自己写函数

    #include <iostream>
    using namespace std;
    
    int main() {
    	string num;
    	cin >> num;
    	long long ans = 0;
    	char temp;
    	int format = 16;//输入的格式
    	for(int i = 0; i < num.size(); ++i){
    		temp = num[i];
    		if(temp >= '0' && temp <= '9'){
    			ans = ans*format + temp - '0';
    		}else{
    			ans = ans*format + 10 + temp - 'A';
    		}
    	}
    		cout << ans;
    
    	return 0;
    } 
    

    法三,strtol()函数

    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    
    int main() {
    	char str[8];
    	cin >> str;
    	cout << strtoull(str ,NULL ,16); 
    	//	“string to unsigned long long”
    	//	需要 <stdlib.h> 
    	//	NULL为遇到非法字符返回的指针地址
    	//	16为str的格进制 ,范围为2~36,若写0则自动猜测进制 
    	
    	return 0;
    } 
    

    B-12、十六进制转八进制


    此题要求的数量很大,所以很麻烦,法一为理解起来最简单的方法
    法一
    出自 https://www.tuicool.com/articles/22I3Ib
    思路简单,switch转二进制,
    由于十六进制转二进制和八进制从二进制转换,对应的总二进制位数可能不同,
    所以需要在转八进制前进行判断,在开头补“0”,
    由于题目要求输出时开头不为“0”,所以输出时对开头也要判断。

    #include <iostream>
    #include <string>
    using namespace std;
    int arr[10000001];
    
    int main()
    {
    	int n,len_str,i,j;
    	string str,str2;
    	cin>>n;
    	while(n--)
    	{
    		cin>>str;
    		len_str=str.length();
    		str2="";
    
    		// 十六进制转换为二进制
    		for(i=0;i<len_str;++i)
    		{
    			switch(str[i])
    			{
    			case '0':str2+="0000";break;
    			case '1':str2+="0001";break;
    			case '2':str2+="0010";break;
    			case '3':str2+="0011";break;
    			case '4':str2+="0100";break;
    			case '5':str2+="0101";break;
    			case '6':str2+="0110";break;
    			case '7':str2+="0111";break;
    			case '8':str2+="1000";break;
    			case '9':str2+="1001";break;
    			case 'A':str2+="1010";break;
    			case 'B':str2+="1011";break;
    			case 'C':str2+="1100";break;
    			case 'D':str2+="1101";break;
    			case 'E':str2+="1110";break;
    			case 'F':str2+="1111";break;
    			default:break;
    			}
    		}
    		
    		// 修正位数
    		if(len_str%3==1)	str2="00"+str2;
    		
    		else if(len_str%3==2)	str2="0"+str2;
    
    		
    		len_str=str2.length();
    		// 二进制转换八进制
    		j=0;
    		for(i=0;i<=len_str-2;i+=3)
    		{
    			arr[j]=(str2[i]-'0')*4+(str2[i+1]-'0')*2+(str2[i+2]-'0');
    			++j;
    		}
    
    		for(i=0;i<j;++i)
    		{
    			if(i==0 && arr[i]==0)	continue;
    			cout<<arr[i];
    		}
    		cout<<endl;
    
    	}
    	return 0;
    }
    

    法二,从二进制角度来看,三个十六进制数长度与四个八进制数相等,可根据此,转换为二进制,对二进制源码进行操作
    https://blog.csdn.net/JiLuoXingRen/article/details/50478759
    附上大佬原贴,我着实想不出来,但此方法各方面效率并不比方法一好。

    #include <iostream>
    #include <string>
    #include <math.h>
    using namespace std;
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
     
    int main(int argc, char *argv[]) {
    	int n=0;
    	cin>> n;
    		
    	string* Hex = new string[n];
    	string tmpOct;
    	string* Oct = new string[n];
    	
    	for(int i=0;i<n;i++)
    	{
    		int CurBit = 0;
    		cin>>Hex[i];
    		
    		tmpOct = "";
    		Oct[i] = "";
    		
    		for(int j=Hex[i].size()-3;j>=0;j-=3)
    		{
    			int d = 0;
    			for(int k=0;k<3;k++)
    			{
    				int t = j+k;
    				// 16 To 10
    				if(Hex[i][t]>='0' && Hex[i][t]<='9')
    				{
    					CurBit = Hex[i][t]-'0';
    				}
    				if(Hex[i][t]>='A' && Hex[i][t]<='F')
    				{
    					CurBit = Hex[i][t]-'A'+10;	
    				}
    				
    				d = d * 16 + CurBit;
    			}
    			
    			// 3bit hex to 4bit oct
    			int base = 7; // 111B
    			for(int k=0;k<4;k++)
    			{
    				tmpOct += (char)('0' + (d & base));
    				d = d >> 3;
    			}
    			d = 0;
    		} 
    		
    		// last less three
    		int rest = Hex[i].size() % 3;
    		if(rest != 0)
    		{
    			int d = 0;
    			for(int k=0;k<rest;k++)
    			{
    				// 16 To 10
    				if(Hex[i][k]>='0' && Hex[i][k]<='9')
    				{
    					CurBit = Hex[i][k]-'0';
    				}
    				if(Hex[i][k]>='A' && Hex[i][k]<='F')
    				{
    					CurBit = Hex[i][k]-'A'+10;	
    				}
    				
    				d = d * 16 + CurBit;
    			}
    			
    			int base = 7; // 111B
    			int max = ceil(4.0 / 3.0 * rest);
    			// 1bit hex = 4/3 bit oct
    			for(int k=0;k<max;k++)
    			{
    				if(((k==max-1) && (d & base)!=0) || k<max-1)
    					tmpOct += char('0' + (d & base));
    				d = d >> 3;
    			}
    		}
    		
    		int j=tmpOct.size()-1;
    		// turn order
    		for(;j>=0;j--)
    		{
    			Oct[i] += tmpOct[j];
    		}
    	}
    	
    	for(int i=0;i<n;i++)
    	{
    		cout<<Oct[i]<<endl;
    	}
    	
    	cin>>n;
    	return 0;
    }
    
    
    展开全文
  • Deleted User..10计算机不使用十六进制.计算机中没有处理十六进制值的组件.相反,计算机大多数情况下使用二进制值,数字"是"和"否"信息,表示为"施加电压"和"无电压",也称为"hi"和"lo",或"1"和"1". 0"但是因为将二进制...

    Deleted User..

    10

    计算机不使用十六进制.计算机中没有处理十六进制值的组件.相反,计算机大多数情况下使用二进制值,数字"是"和"否"信息,表示为"施加电压"和"无电压",也称为"hi"和"lo",或"1"和"1". 0"

    但是因为将二进制数表示为0和1的字符串使得它们难以阅读,所以将十六进制用作快捷方式:4位组(那些1和0信息)表示为一个十六进制数字.这种从二进制转换为十六进制,反之亦然,非常简单.将二进制转换为十进制或十进制转换为二进制涉及更多操作.

    因此,十六进制系统不是由计算机使用,而是由人类使用,用于表示二进制数字,但比从/到十进制数字系统更容易转换.

    十六进制数具有另一个特征,它使它们优于十进制数:两个数字之间的变化仅涉及翻转一个或几个比特并不罕见.得到的十进制数看起来非常不同 - 更改位的值越高,越不同.在十六进制数字中,只有覆盖已更改位的数字会发生变化,其余数字会保留其值.这有助于在心理上将这些十六进制数字所代表的值分组.

    除了十六进制之外,还经常使用八进制系统.它的缺点是一个八进制数字仅描述一组3位,而不是4.因为计算机中的二进制数字(例如地址)通常具有2的幂范围,这些数字更适合组成四组而不是组三个.

    人类没有"被迫"使用十六进制来组装.这只是一件方便的事情.

    +1.当我处理2或位掩码的幂时,我倾向于使用十六进制表示法,而对于其他所有其他东西,我倾向于使用十进制表示法. (2认同)

    展开全文
  • 十六进制

    2016-11-02 22:37:16
    十六进制,类似于十进制,但是十六进制有十六个基数: 1,2,3,4,5,6,7,8,9,A,B,C,D,E,F Are you kinding me? 当然了,不逗你逗谁啊! 十六进制多出来的一串字母确实很难让人接受,你可能会问10去哪了? 11去哪了?...
    在生活中,我们最熟悉的进制无非就是十进制。或者是时钟上面的六十进制。再或者就是计算机的二进制,那么十六进制到底是怎么一回事?
    

    十六进制是什么?

    十六进制,类似于十进制,但是十六进制有十六个基数:
    

    1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

    Are you kinding me?
    当然了,不逗你逗谁啊!
    十六进制多出来的一串字母确实很难让人接受,你可能会问10去哪了?
    11去哪了?呵呵。。。 
    

    为了方便大家记忆,我就想了个好办法。

    多少进制就没有多少。

    例如二进制没有二,十进制没有十,十六进制固然没有十六
    (那问题就来了,十进制为什么没有十?哈哈哈哈)
    

    关于转化

        十六进制被号称为黑客最爱的进制,原因只有一个,那就是十六进制和二进制中完美的切换。
    举个栗子:
    

    二进制中:0100 1000 0101 1111
    十六进制: 4 8 5 F

        转化就是很简单的,每四个二进制对应一个十六进制。不必惊讶,就是如此,那么问题又来了(为什么每四个二进制对应一个十六进制呢?哈哈哈哈)
        所以,在计算机语言当中,使用十六进制可以大大简化我们的表示方式,比如说一个无符号整型变量,假设他占用四位:
    

    那么他的取值范围
    二进制表示:[0000,1111]
    十进制表示:[0,15]
    十六进制表示:[0,F]

    最后

        也许到这里十六进制的优势,还不是很明显,但对于long或者long long 类型的表示方式,十六进制的优势明显。在位运算里,十六进制的表达更清晰。在指针地址的表示,十六进制也能更好更清晰的表示。
        希望各位也能找到十六进制的优势还有其他地方的应用,欢迎来跟我分享。
    
    展开全文
  • 为什么计算机以汇编语言使用十六进制数字系统? 他们为什么不使用其他数字系统,例如二进制,八进制,十进制? 什么事情迫使计算机设计师在组装时使用十六进制系统? 为什么它看起来对他们如此有益?嗯,我很确定,...

    为什么计算机以汇编语言使用十六进制数字系统? 他们为什么不使用其他数字系统,例如二进制,八进制,十进制? 什么事情迫使计算机设计师在组装时使用十六进制系统? 为什么它看起来对他们如此有益?

    嗯,我很确定,许多汇编语言都允许您以十进制而不是十六进制指定值。 而且计算机本身不在乎-汇编程序只是要将汇编程序更改为字节,此时,源代码中的基数是无关紧要的。 ("计算机设计器"!="汇编语言设计器")

    计算机仅理解数字逻辑,通常由二进制数字系统表示。 hex只适用于人类,因为它很容易将1个十六进制数字映射为4位。

    什么东西强迫人类使用十进制数字? 这就使得在心理上很难加倍和减半,这是人类能够在头脑中普遍准确地理解的唯一乘法运算。

    @Kerrek:两只手的手指数除以两等于一只手的手指数。

    电脑不使用十六进制。计算机中没有可用于十六进制值的组件。取而代之的是,计算机大部分工作在二进制值上,即数字"是"和"否"信息,表示为"施加的电压"和"没有电压",也称为" hi"和" lo",或" 1"和" 0"

    但是,因为用0和1的字符串来表示人类的二进制数使它们难以阅读,所以将十六进制用作快捷方式:将4位(1和0的信息)的组表示为一个十六进制数字。

    从二进制到十六进制的转换非常简单,反之亦然。将二进制转换为十进制,或将十进制转换为二进制,涉及更多操作。

    因此,十六进制系统不是由计算机使用的,而是由人类使用的,用于二进制的更简短的表示,但是比从/到十进制的转换更容易。

    十六进制数字的另一个特点是,它们优于十进制数字:两个数字之间的转换仅涉及一位或几位的转换是很常见的。最终的十进制数看起来会非常不同-改变的位越大,数值越大越多。在十六进制数字中,只有覆盖已更改位的数字会更改,其余数字将保留其值。这有助于在精神上对那些十六进制数字代表的值进行分组。

    此外,十六进制也是/曾经是八进制系统。缺点是一个八进制数字仅描述一组3位,而不是4位。计算机中的二进制数(例如,地址)通常具有2的幂的范围,所以该数字更适合四组而不是四组三。

    人类没有被"强迫"使用十六进制进行组装的事情。这仅仅是一个方便的事情。

    +1。 当Im处理2的幂或位掩码时,我倾向于使用十六进制表示法,而对于其他所有内容,我倾向于使用十进制表示法。

    在汇编语言中,从位生成数字并查看将哪些位设置为特定数字通常很重要。

    如以下示例所示,在C程序中通常也是如此:

    a = b&0xE0; // high 3 bits

    c = b&0x1F; // low 5 bits

    正如其他答案中已经提到的那样,使用二进制数字不是很容易理解。但是,使用十进制数字将无法查看受影响的位:

    a = b&222; // which of these three instructions

    a = b&224; // takes the high 3 bits?

    a = b&226; // it is not easy to see!

    当使用以2 ^ N(八进制或十六进制)为基数的编号系统时,一位数字对应于某些位(例如,在十进制系统中,更改十进制数一位可能会更改二进制数中的所有位)。

    八进制数的使用少于十六进制数。可能的原因是八进制数字代表3位,而十六进制数字代表4位。但是,现代计算机中使用的所有数据类型都使用4位的倍数。示例:" uint16"数字可以用4位十六进制数字表示,而所有4位十六进制数字都可以用" uint16"数字表示。

    嗯,表示它们的方式并没有什么不同,但是我们知道人类不理解二进制数字,它们只是使计算机的工作变得更轻松,因为它只能在真假两种状态下工作。因此,为了使二进制数字(指令)易于阅读,我们采用了十六进制数字系统来表示汇编指令。它起源于计算机的历史。

    For example we can represent this binary number

    11010101110100110010001100111010 in

    hex as     0xd5d3233a

    octal as   32564621472

    decimal as 3587384122

    如您所见,它易于阅读并且对人来说不太容易出错。十六进制值是最精确的。

    我不同意:这些数字的"精度"是相同的。 数字精度描述了其价值的可重复性和可重复性。 所显示的二进制数将转换为等效于其十进制数而不是等效于其八进制或十六进制数的频率,因此它们具有相同的精度。

    展开全文
  • 十六进制自动生成

    2017-07-06 11:31:14
    修改内部存储地址范围,可以生成FFFFFFFF以内数据(原来只能生成FFFF以内数据) 改进了按位补"0"功能,根据起始数的位数(例如"0000"),生成的数据自动补齐4位 2011-5-26 V1增加了终止号选择(个数) 2011-5-11 初版V0 1...
  • 二进制、八进制、十进制、十六进制关系及转换

    万次阅读 多人点赞 2019-02-21 21:20:22
    二进制,八进制,十进制,十六进制之间的关系是什么?浮点数是什么回事? 本文内容参考自王达老师的《深入理解计算机网络》一书&amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;中国水利水电出版社&amp;amp;amp;amp...
  • 十六进制转二进制与二进制转八进制问题将十六进制的字符串转换为二进制字符串将二进制的字符串转换为八进制的字符串运行效果图完结 问题 问题描述  给定n个十六进制正整数,输出它们对应的八进制数。 输入格式  ...
  • 十六进制计数和编址

    2018-04-29 00:08:07
    十六进制是二进制值的一种便利表示方式。以16为基数的计数系统使用数字0到9和字母A到F。一、理解字节 8位(1个字节)是一种常用的二进制组,从00000000到11111111的二进制数可表示为从00到FF的十六进制数。前导零...
  • 现代计算机存储和处理的信息以二值信号表示,二值信号能够很容易地被表示、存储和传输。 虚拟存储器:被视为字节数组,按字节(一个字节由8位组成。在二进制表示法中,它的值域是0000000〜11111111;...十六进制.
  • 十六进制转ASCII码

    千次阅读 2019-04-04 21:03:16
    芯片传回来的数据是以十六进制表示的,但是我想要把这十六进制代表的数据通过UART发送到电脑上表示出来,所以最终要求就是将十六进制表示的数据用ASCII码表示传给电脑。 但是所用的单片机又调不出sprintf函数… ...
  • 数值 1,二进制 一:数值 ...4,十六进制(Hexadercimal Number) 表示(1012)16或1010H 二:二,八,十,十六进制转换表 ·二进制 八进制 十进制 十六进制 0 0 0 0 1 ..
  • 十六进制转double

    千次阅读 2018-07-11 14:56:29
    要明白如何将十六进制转换为float或double,需要了解浮点数的二进制存储和转换方式。float和double在存储方式上都遵从IEEE的规范,且float遵从IEEE R32.24,而double遵从R64.53。具体转换规则可以参考...
  • BCD码、十六进制与十进制互转

    千次阅读 2014-04-22 21:38:39
    在做嵌入式软件的设计中,经常会遇到十六进制、BCD码与十进制之间的转换,最近做M1卡的应用中,涉及了大量的十六进制、BCD码与十进制之间的转换。通过对BCD码、十六进制 权的理解,轻松的实现了他们之间的互换。 ...
  • 前言:由于最近有项目需求,需要对采集回来的数据进行解析和处理,而源数据是十六进制格式的,但是由于python3将字节和字符串有了更为严格的区分,所以不能直接对数据进行readline,需要进一步的处理。 下面是具体的...
  • linux下十六进制文件编辑器

    千次阅读 2019-01-20 13:53:52
    linux下十六进制文件编辑器
  • 英文字母如何转化为十六进制

    千次阅读 2019-09-29 21:45:18
    将字母、符号转化为十六进制可用到ASCII码。ASCII(American Standard Code for Information Interchange,美国信息互换标准代码,ASCⅡ)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语和其他西欧语言...
  • 给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。 注意: 十六进制中所有字母(a-f)都必须是小写。 十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么...
  • 我们发现0x1000是0x100的0x10倍(相当于十进制的16倍),以此类推,在十六进制数中,多个0相当于0x10倍,熟记上面的进制对应表,遇到一个十六进制数,找到与之对应最接近上面的十六进进制数(我们称之为常用十六进制...
  • 非(qiang)常(po)乐(zi)意(ji)来一起讨论下如何十六进制
  • 64KB的存储器用十六进制表示,它的最大的地址码是

    万次阅读 多人点赞 2016-10-22 09:16:39
    64KB的存储器用十六进制表示,它的最大的地址码是 这个问题比较绕并不难,我这里稍微解释一下,算是个人的理解。 首先存储器有64KB的容量,能有多少地址我们先算一算,然后再换算为十六进制 注意,这个64KB是十...
  • linux下十六进制文件编辑

    千次阅读 2011-04-03 10:40:00
    vim作为十六进制编辑器用vim打开二进制文件,切换到command模式,输入 :%!xxd可以把当前打开的文件转化为十六进制编辑模式,编辑完成以后再 :%!xxd -r转换回去保存。 在vim 下,首先找开文件,按键,...
  • 最近刷题的时候遇到一个基础题,就是将16进制数转为8进制数。咋一看极其简单,用二进制做... 接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。...
  • 最后一个样例运行错误,那应该是越界了,超出了整型的范围 题目是这样的 解决:换成长整型, import java.util.*; public class Main { public static void main(String args[]) { Scanner in = new ...
  • iOS nslog 使用 十六进制输出 1. 数据类型简介及输出 (1) 数据类型简介  数据类型简介 : Object - C 数据类型 分为 基本数据类型, 构造类型 和 指针类型; -- 基本数据...
  • 涉及到内存, 我们都知道计算机cpu进行储存运算的都是以二进制.在C++中, 指针类型作为一种指向内存...那么, 0xFFFF FFFF转换为二进制该如何转换呢, 实际上非常简单, 对于八进制, 十六进制转换为二进制, 我们只需要...
  • public static String toHexString(int i)以十六进制的无符号整数形式返回一个整数参数的字符串表示形式。 如果参数为负,那么无符号整数值为参数加上 232;否则等于该参数。将该值转换为十六进制(基
  • 十进制数57.2 D分别转换成二进制数______________________B、八进制数______________________O、十六进制数_____________ H.16.二进制数110110010.100101B分别转换成十六进制数是______________________H、八进制...
  • 十进制转二进制: 二进制转十六进制十六进制转二进制: 十进制转十六进制十六进制转十进制: float转十六进制: 十六进制转float: 功能上:基本功能是有了,但程序在计算范围上有些局限; 界面上:美观性不好...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 65,643
精华内容 26,257
关键字:

十六进制地址范围