【谁懂十六进制数,问个很简单的问题,谢谢】

【谁懂十六进制数,问个很简单的问题,谢谢】,第1张

你的理解是对的,但是对>> *** 作我再给你提醒一下,假设我们对二进制的0100进行>>1的话,结果应该是二进制的0010,你明白吗?因为>> *** 作就是移位,把所有的数字右移一位,最右边的不要,左边的添加0。
那我们回头来看,二进制1000为什么在>>1之后不是0100而是1100呢,因为1000最高位为1,机器认为是个负数,所以在所有数字右移一位之后,左边不是添0而是添1。
按照计算机的反码规则,二进制最高位为1的数是负数,所有结果0xc00000000输出的结果就是一个负数。
最高位为1表示负数的道理是很简单的,我们以四位的二进制为例子,0000表示0,那么这个数再减1(忽略借位)结果就是1111,这就是-1,再减去1就是1110,这就是-2。

整数在内存里面存储的方式是按二进制存放的,比如:
2,是10;
10,是1010;
你对长整型数字进行移位,左移一位,比如10,移位后就是10100,相当于×2;同理,右移一位,就是101,相当于÷2
这道题移位法处理就是判断数字是否等于0,如果不等于,%16保存余数,再右移4位,直到数字为0为止,得到一个倒序的字符串,然后颠倒过来就行。得到倒序字符串的代码示例。
unsigned int a = 0x457AC8F2;
printf("%x\n",a);
while(a !=0 )
{
printf("%x ",a % 16);
a = a >> 4;
}

1 二进制和十六进制本质是一样的,不知道你为什么非要转换,如果非要转,那么就四位一处理,也就是四个二进制位对应一个十六进制位。
2 要想得到移位移出的数据,只能自己记录移出了哪些数据
int count = 4 ; //移位数
int temp = 0 ;
int num ; // 要移位的数
int a[10] ;// 记录移出的数
while(temp < count)
{
a[temp] = num & 1 ;
num >>= 1 ;
temp++ ;
}
这样,移位完成后,数组a中就是移出的数了

左移其实就是乘法。
例如十进制;10左移一位就是100,相当于1010;
二进制:10左移一位就是100,从原先的2变为4,就是乘以2;
左移一位就是把原来的数乘以"进制"
二进制x2就是左移一位。

1、二进制转换为十进制

二进制数00111从低位到高位的位权依次是2的0次幂1、2的1次幂2、2的2次幂4、2的3次幂8、2的4次幂16。

理解了二进制计数的基数和位权,就可以进行数制转换了。00111如何转换成十进制计数呢?转换很简单,将二进制数从高位到低位每个数字乘以相应的位权然后求和就可以了。

00111(二进制)= 0 2^(5-1) + 0 2^(4-1) + 1 2^(3-1) + 1 2^(2-1) + 1 2^(1-1)

= 0 16 + 0 8 + 1 4 + 1 2 + 1 1

= 7(十进制)

2、十进制转换为二进制

十进制整数到二进制整数的转换可以采用“除2取余,逆序输出”法,

具体转换过程是,用2去除一个十进制数,得到商和余数,然后再用2去除商,又会得到商和余数,循环往复直至商为0为止。如果是十进制小数转二进制小数,则采用“乘2取整,顺序输出”。转换过程如下图所示:

3、二进制和八进制之间的转换

二进制转八进制:取三合一法,即从二进制的小数点为分界点,向左(向右)每三位取成一位,接着将这三位二进制按权相加,然后,按顺序进行排列,小数点的位置不变,得到的数字就是我们所求的八进制数。

如果向左(向右)取三位后,取到最高(最低)位时候,如果无法凑足三位,可以在小数点最左边(最右边),即整数的最高位(最低位)添0,凑足三位。

4、八进制转二进制:取一分三法,即将一位八进制数分解成三位二进制数,用三位二进制按权相加去凑这位八进制数,小数点位置照旧。

5、二进制和十六进制之间的转换

二进制转十六进制:取四合一法,即从二进制的小数点为分界点,向左(向右)每四位取成一位,接着将这四位二进制按权相加,然后,按顺序进行排列,小数点的位置不变,得到的数字就是我们所求的十六进制数。

如果向左(向右)取四位后,取到最高(最低)位时候,如果无法凑足四位,可以在小数点最左边(最右边),即整数的最高位(最低位)添0,凑足四位。

6、十六进制转二进制:取一分四法,即将一位十六进制数分解成四位二进制数,用四位二进制按权相加去凑这位十六进制数,小数点位置照旧。

7、十进制和八进制之间、十进制和十六进制之间都是先把十进制转换为二进制,然后在转换为八进制或者十六进制。

扩展资料

某进制计数制允许选用的基本数字符号的个数成为基数。一般来说,N进制的基数为N,可进行选用的基本数字符号有N个,分别为0到N-1。

比如十六进制的基数为16,可供选择的基本数学符号为0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F十六个。

位权是指,该进位制中每一固定位置对应的单位值,简称为权。

以十进制计数制来说,计数单位分别为个位、十位、百位、千位、万位、十万位……,其中个位数表示数值1、十位数表示数值10、百位数表示数值100、千位数表示数值1000、……,每个位数表示的数值叫位权。

位权通过计算基数的n-1次幂就可以得到,这里的n是指位数所在数字中的位置。在十进制中就是10的(n-1)次幂。

例如,对十进制数1260来说,个位数是1260的第一个数字,因此n为1;十位数是第二个数字,因此n为2;百位数是第三个数字,因此n为3;千位数是第四个数字,因此n为4。

由此,个位数的位权为10的1-1次幂是1,十位数的位权为10的2-1次幂是10、百位数的位权为10的3-1次幂是100、千位数的位权为10的4-1次幂是1000。

1260 = 1 10^(4-1) + 2 10^(3-1) + 6 10^(2-1) + 0 10^(1-1)

= 1 1000 + 2 100 + 6 10 + 0 1

= 1000 + 200 + 60 + 0

参考资料来源:百度百科-进制


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13166522.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-14
下一篇 2023-06-14

发表评论

登录后才能评论

评论列表(0条)

保存