首先对于一个整数,无论是十进制还是十六进制,它的值是一定的。
麦积网站建设公司创新互联公司,麦积网站设计制作,有大型网站制作公司丰富经验。已为麦积超过千家提供企业网站建设服务。企业网站搭建\外贸网站建设要多少钱,请找那个售后服务好的麦积做网站的公司定做!
所以,转换16进制和10进制原理是一样的,先求出转换后的值,然后再以十六进制的形式输出就行了。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
你不会是直接从网页里面复制就粘贴到编辑器里面吧?
那样不行的,你自己重新输入一下。或者先拷贝到文本文档里面,再从文本文档里面复制。从网页里面直接复制有特殊字符的。
还有,程序函数不能在主函数里面定义的。
#include stdio.h
int convert(char * str);
void main()
{
char str[20];
int result;
scanf("%s",str); //自己输入一个十六进制的串
result = convert(str);
printf("%0x",result);
}
int convert(char * str)
{
int i,sum = 0;
for(i = 0;str[i] != '\0';i++)
{
if(str[i]='0' str[i]='9')
sum += sum*16 + str[i]-'0';
else if(str[i]='f' str[i]='a')
sum += sum*16 + str[i]-'a'+1;
else if(str[i]='F' str[i]='A')
sum += sum*16 + str[i]-'A'+1;
}
return sum;
}
1.c语言中int取值范围为16位指的是什么16位
计算机用二进制表示数值,最小单位就是位(bit),可以储存0或1,16位就是有16个储存0或1的位,其中左边第一位是符号位,0代表+ 、1代表-。
2.当中16位与-32768~+32767又有什么关系?
这里的-32768~+32767是指用16位来储存一个int值的取值范围。int是integer(整数)的缩写,int类型的值必须是整数,可以是正整数,负整数或0。
3.是不是16位指的就是32767用二进制表示时有16位数字
不是,16位表示32767是0111
1111
1111
1111,而0000
0000
0000
0000
0111
1111
1111
1111也表示32767,它有32位。
扩展:关于为什么16位int值的取值范围是-32768~+32767。
二进制转化为十进制,从右往左数,第一位代表2的0次方,第二位是2的1次方,以此类推,用每一位上的数乘以对应位的值再相加即可得到对应的数值。比如1011就等于1*(2^0)+1*(2^1)+0*(2^2)+1*(2^3)=1+2+0+8=11。
那么计算机表示的16位正数范围就是从0000 0000 0000 0001到0111 1111 1111 1111。(注意:计算机表示时最左边是符号位。)
也就是正的1*(2^0)到1*(2^0)+1*(2^1)+1*(2^2)+……+1*(2^14)=(2^15)-1
也就是+1~+32767。
负数范围要了解计算机内部表示负数的方法,“2的补码”,具体方法分两步:
第一步,每一个二进制位都取相反值,0变成1,1变成0。
第二步,将上一步得到的值加1。
比如要表示16位的-1,就把+1也就是0000 0000 0000 0001取反变为1111 1111 1111 1110,再+1,也就是1111 1111 1111 1111表示-1。
那么要知道计算机表示的一个负数的绝对值就要把这个负数按照上面所说的“2的补码”规则反处理。所以16位能表示的最小负数,也就是符号位为1,其余全部为0,即1000 0000 0000 0000。
(这里比较难理解为什么确定符号为1,后面要全部取0,主要是为了经过反处理后得到一个尽量大的数值,也就是最左边位置2^15位上的值为1,这样才能得到最小的负数。)
第一步,1000 0000 0000 0000(处理时,这是一个二进制数值,1不再是符号) 减去1得到 0111 1111 1111 1111。
第二步,取反,变为1000 0000 0000 0000,即1*2^15。
综上,16位int取值范围是1000 0000 0000 0000到0111 1111 1111 1111即-2^15~(2^15)-1,-32768~+32767。
c语言将十进制数转换为16进制的函数:
#includestdio.h
main()
{
int u10;
char u16[10];
int w=0,a,b,i;
printf("请输入一个数字--");
scanf("%d",u10);
if(u10==0)
{
u16[0]='0';
w++;
}
else
{
a=u10;
while(a)
{
b=a%16;
if(b10)
{
u16[w]='0'+b;
}
else
{
u16[w]='A'+b-10;
}
a=a/16;
w++;
}
}
printf("\n");
printf("%d(10)转换为16进制数字为:",u10);
for(i=w-1;i=0;i--)
{
printf("%c",u16[i]);
}
printf("\n");
}
扩展资料:
十进制数转换为二进制数方法
十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。
1. 十进制整数转换为二进制整数 十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
2.十进制小数转换为二进制小数
十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。
然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。
参考资料:
百度百科-十进制
用位移操作
#include stdio.h
#define m_size 10
#define n_size 10
int main()
{
int i = 0;
int bit = 0;
int f[m_size][n_size] = {0};
for(i=0; i16; i++)
{
scanf("%d", bit);
f[0][0] = bit | (f[0][0] 1);
/*这句是把后输入的数字放在低位.如果想把后输入的数字放高位改成f[0][0] = (biti) | f[0][0];*/
}
return 1;
}