在编程中如果有8个1(二进制)转换成一个双整数(32位),那么结果是什么?难道是前面24个0,后面8个1?

来源:百度知道 编辑:UC知道 时间:2024/05/25 12:24:53

不一定,这要看你刚开始声明的这个char(或者byte)是有符号的(默认的)还是无符号的(unsigned char)如果是有符号的,8个1是-1,在扩展成32位的时候进行的是符号位扩展,最后会成为32个1。如果是无符号的,8个1表示的是255,是8位表示下的最大整数,在扩展为32位的时候,就变成前面24位0,后面8个1

//s是要转换的字符串,l是字符串长度,n为字符串代表的数字的进制
//2到16进制,返回值为整数,十进制
int getvalue(char* s,int l,int n)
{
if (s==0 || n<=1 || n>16)
return 0;
int i;
char c;
int value = 0;
int q = 1;

for (i=0;i<l;i++)
{
c = s[l-1-i];

if (c>='0' && c<='0'+n-1)
{
value+=q*(c-48);
q*=n;
}
else
{
if (n<11)
return 0;//错误的数据
else
if (c>='A' && c<='A'+n-11)
{
value+=q*(c-'A'+10);
q*=n;
}
else
if (c>='a' && c<='z'+n-11)
{
value+=q*(c-'a'+10);
q*=n;
}
else
return 0;//非法的字符
}

}

return value;
}