一个简单的有关问题:像这样的16进制数怎么转换得到
一个简单的问题:像这样的16进制数如何转换得到?
下列3个整数(用16进制表示) 如何通过某种运算一次性得到右边的数:
0X1212BE72 ====>0X212BE72*10
0X2312BE8D ====>0X312BE8D*100
0X3511DDEC ====>0X511DDEC*1000
................. ....................
也就是前面的一个数字N去掉,剩下的组成一个新数乘以10的N次方。
另:求出的数值会变很大 为了防止溢出请问用什么数据类型存储呢
------解决思路----------------------
移位啊
------解决思路----------------------
------解决思路----------------------
__int64
下列3个整数(用16进制表示) 如何通过某种运算一次性得到右边的数:
0X1212BE72 ====>0X212BE72*10
0X2312BE8D ====>0X312BE8D*100
0X3511DDEC ====>0X511DDEC*1000
................. ....................
也就是前面的一个数字N去掉,剩下的组成一个新数乘以10的N次方。
另:求出的数值会变很大 为了防止溢出请问用什么数据类型存储呢
------解决思路----------------------
移位啊
#include <stdio.h>
unsigned int
conv(unsigned int x)
{
unsigned int i, a, m, n;
a = x & 0x0FFFFFFF;
n = x >> 28;
m = 1;
for (i = 0; i < n; i++)
{
m = m * 10;
}
printf("0X%08X===>0X%08X*%u\n", x, a, m);
return (a * m);
}
int
main(int argc, char *argv[])
{
unsigned int x;
x = 0X1212BE72;
conv(x);
x = 0X2312BE8D;
conv(x);
x = 0X3511DDEC;;
conv(x);
return 0;
}
------解决思路----------------------
unsigned int a = 0X1212BE72;
unsigned int b = ( a & 0xF0000000 ) >> 7;
int c [100];
memset( c, 0, sizeof(c) );
int i = b;
unsigned int d = a & 0x0FFFFFFF;
while( d%10 > 0 )
{
c[b] = d%10;
d = d/10;
b++;
}
for( int i=b-1; i>0; i-- )
printf( "%d", c[i] );
------解决思路----------------------
__int64