c语言中二进制转化问题!

#include<stdio.h>
main()
{
int c1,c2;
c1=300;
c2=400;
printf("%c %c\n",c1,c2);
结果是“.”和“?”求高手解答为什么300和400以字符形式输出会是这个结果?

#include<stdio.h>
main()
{
int c1,c2;
c1=300;
c2=400;
printf("%c %c\n",c1,c2);//因为字符只有8位 这里 c1,c2 会强制转换成char型
// 便只有低八位会显示
// c1%256= 44=0x2c 即是ASCII ','
// c2%256= 144 超过ASCII 127的范围,即无相应字符,一律为 '?'
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-10-12
printf("%c %c\n",c1,c2);这句输出意思是按 字符 输出变量
一个char字符只占一个字节,8bits ,表示成数值,其范围为:
-128到127(有符号数)或0-255(无符号数)
你的300 400均超过了字符的ASCII值,因此,系统会自动进行数据转换(丢掉高位,只保留一个字节进行输出),因此,会输出“.”和“?”。因为低位的数值正好是这两个字符的ASCII代码值。本回答被网友采纳
第2个回答  2012-10-12
首选我们来说一下%c这个东西。。。
它是将后面的字母或数字按ascii表中把指定的值将对应的符号显示出来。。。
当然ascii表的长度只有256.。。也就是只有一个字节的长度。。。
但是你的300所占用的是4个字母。。那么它会强转成char型 的。。。也就是只会保留最后一个字节的数据。
然后你再用补码来算一下。。
你就晓得它输出的应该是ascii表的046所对应的符号了。。。
400同理可得
第3个回答  2012-10-12
这个和存储方式有关,你可以
union store{
short s;
char a[2];
};
然后s赋值300 400
输出a[0], a[1]看看他们的值有什么关系
肯定有一个是. /?的ascii码
第4个回答  2012-10-12
可想而知是个错误结果
字节只能储存255的数字 一个符号位 最大为
01111111 +1 的话就是 -256
你想下能出什么结果
第5个回答  2012-10-12
%C是字符显示。范围是0-127.。。。。c1,c2明显过大了
第6个回答  2012-10-12
因为这两个对应的是ASCII码,当超出127时循环了,也就是300-127*2=46;对应的46 的ASCII码,另外一个自己可以求出来

c语言中二进制转化问题!
int c1,c2;c1=300;c2=400;printf("%c %c\\n",c1,c2);\/\/因为字符只有8位 这里 c1,c2 会强制转换成char型 \/\/ 便只有低八位会显示 \/\/ c1%256= 44=0x2c 即是ASCII ','\/\/ c2%256= 144 超过ASCII 127的范围,即无相应字符,一律为 '?'} ...

c语言中二进制 十进制 八进制 十六进制之间的换算?
二进制的1101转化成十进制 1101(2)=1*2^0+0*2^1+1*2^2+1*2^3=1+0+4+8=13 转化成十进制要从右到左用二进制的每个数去乘以2的相应次方 不过次方要从0开始 十进制转二进制: 用2辗转相除至结果为1 将余数和最后的1从下向上倒序写 就是结果 例如302 302\/2 = 151 余0 151\/2 =...

求助一个c语言问题?
二进制11111111代表-127,是按原码规则来算。若按补码规则,二进制11111111算出来是-1。文中说的是10000000代表-128。详细描述如下:[+1] = [00000001]原 = [00000001]反 = [00000001]补 [-1] = [10000001]原 = [11111110]反 = [11111111]补 计算机将第1位作为符号位,0表示正数,1表示负数。

c语言把二进制数转换成十进制数的程序怎么写。
按照如下步骤即可用C语言把二进制数转换成十进制数的程序:1、首先在主函数中设置成函数Sum,另外定义了一个数组array[8],用于存放输入的八位二进制数。2、然后使用了一个for循环语句,用于输入八位二进制数。在scanf函数里,在%d之间加一个1,然后使用printf函数输出,并且调用Sum函数,数组名作为实参。

C语言题目求解 20题中 为什么要先转换成二进制运算?位与运算是怎样算...
&是位运算符,a&b是二进制数对应位都是1则为1否则是0,a转换后是 1110 b转换后是 1111,前三位对应都是1,最后一位不都是1则为0,最终a@b=1110(二进制)=14(10进制)&&是逻辑运算符,两边都是真则为真否则为假,左边14是真(只有0是假)右边是真所以都是真 结果是1 ...

C语言 将一个二进制数,转换为对应的十进制数。
int main(){ int a[10] = {1,0,0,1,0,1,1,0,0,0};\/\/这里只是预先写好的二进制数,可以自行改为主动输入,主要体现过程 int i = 0;int sum = 0;for(i = 9;i>=0;i--)\/\/9为数组最后一位 { sum = sum + a[i];pow(2,abs(i-9));\/\/i- 9 的绝对值判定乘以2 的几...

编程c语言二进制怎么转化为十进制
先把二进制读成字符串, 或者逐个读入字符 然后, 将字符串转为整型。int bin_to_dec(char *s){ int r = 0; while(*s) { r<<1; if(*s=='1') r|=1; } return r;}int main(){ char s[40]; gets(s); printf("%d\\n", bin_to_dec(s))...

C语言求解 二进制转换为十进制
for(j=0;j<len;j++)decimal[i] = decimal[i] + binary[i][j]*pow(2,j);} for(i=0;i<n;i++)printf("%d\\n",decimal[i]);for(i=0;i<n;i++){ free(binary[i]);} free(binary);free(decimal);} 程序开辟的空间只支持16位的二进制数,最多可以改到32位,多了就溢出了 ...

C语言,利用函数实现将二进制数转化为十进制数并实现相加。
1、2进制10进制的转换方法:二进制数1101转十进制: 1×2的三次幂+1×2的二次幂+0×2的一次幂+1×2的零次幂=8+4+0+1=13 附加一个八进制转十进制的例子吧: 507(八进制转10进制): 5×8的2次幂+0×8的1次幂+7×8的0次幂= 5×64+0×8+7×1=327(10进制)2、例程:...

c语言二进制转十进制
一下两个程序均在VC在编译通过。\/ 如果这个二进制数比较大的话, 大到只能用数组储存这个二进制数,当然如果大到转化成10进制int存不下的情况那另当别论 \/ include<stdio.h> include<string.h> int main(){ char a[33];int i, num = 0;scanf("%s", a);for(i=strlen(a)-1; i>=0;...

相似回答
大家正在搜