数组空间的大小和二进制的打印,位域
插入代码:(问题在代码的注释里面)#include<stdio.h>
#include<stdlib.h>
int main(void){
int i=-3;
char str; //这里和问题相关
struct bin{
signed char n:1;
}use;
printf("---------------\n ");
printf("n=%d;n2=%d;\n",use.n);
printf("---------------\n\n");
while(i<=3){
use.n=i;
itoa(use.n,str,2);
printf("use.n=%2di=%2d bin:%s\n",use.n,i,str);
i++;
}
return 0;
}
//为什么当数组空间不够大的时候,只打印 n=-1呢?
时间:2013年7月23日19:11:55;
int i=-3;定义成全局变量。应该不会这样。好像是堆栈出问题了。 本帖最后由 yjip267 于 2015-7-24 09:25 编辑
signed char n:1; 占一位并且是有符号的。而-3的占4个字节0xfdffffff,这个样的。就是把0Xfd第一位赋给了N,所以是-1,而不是数据不够大。 我是知道的 00000 大哥啊啊啊 大哥啊 weisuo 发表于 2015-7-26 12:13
大哥啊
{:9_229:} 不好意思,我一天只上一次论坛,或者几天上一次论坛,回复也就慢了。。。 yjip267 发表于 2015-7-24 09:23
signed char n:1; 占一位并且是有符号的。而-3的占4个字节0xfdffffff,这个样的。就是把0Xfd第一位赋给了N ...
signed char n:1; 占一位并且是有符号的。而-3的占4个字节0xfdffffff,这个样的。就是把0Xfd第一位赋给了N,所以是-1,而不是数据不够大。
那为什么i的数值会发生变化? yjip267 发表于 2015-7-24 09:23
signed char n:1; 占一位并且是有符号的。而-3的占4个字节0xfdffffff,这个样的。就是把0Xfd第一位赋给了N ...
#include<stdio.h>
#include<stdlib.h>
int main(void){
char str;
printf("char=%c,int=%d;\n",(signed char)0xfd,(signed int)0xfd);
itoa(0xfd,str,2);
printf("0xf=\n%s\n",str);
return 0;
}
打印结果:
char=?int=253;
0xf=
11111101
请按任意键继续. . .
while(i<=3)
{
use.n=i;
itoa(use.n,str,2);
printf("use.n=%2di=%2d bin:%s\n",use.n,i,str);
i++;
}
其中i的值从-3到2,十六进制0xfffffffd,0xfffffffe,0xfffffff,0,1,2,而D,E,F ,0,1,2, 第二进制最后一位都有变化的。 本帖最后由 lark 于 2015-7-29 17:09 编辑
yjip267 发表于 2015-7-28 10:33
while(i
感觉回答和我的问题不一样?我一直搞不懂
这是正常的代码,我修改的:
#include<stdio.h>
#include<stdlib.h>
int main(void){
int i=-3;
char buffer;
//char buffer;
//这里的改动会造成数据溢出;将32个1或0存入只有3byte大小的buffer中,
//怎么可能?
struct bin{
signed char n:1;
}use;
//DEC&BIN mode;
while(i<=3){
use.n=i;
itoa(use.n,buffer,2);
printf("【use.n=%2d 【数值i=%d\n【use.n二进制=%s \n\n",use.n,i,buffer);
i++;
}
putchar('\n');
i=-3;
//HEX mode;
while(i<=3){
use.n=i;
printf("【use.n=%2d; sue.n的HEX:%8X ; Num %2d的HEX:%8X\n",use.n,use.n,i,i);
i++;
}
putchar('\n');
return 0;
}
运行结果:
【use.n=-1 【数值i=-1
【use.n二进制=11111111111111111111111111111111
【use.n= 0 【数值i=0
【use.n二进制=0
【use.n=-1 【数值i=1
【use.n二进制=11111111111111111111111111111111
【use.n= 0 【数值i=2
【use.n二进制=0
【use.n=-1 【数值i=3
【use.n二进制=11111111111111111111111111111111
【use.n=-1; sue.n的HEX:FFFFFFFF ; Num -3的HEX:FFFFFFFD
【use.n= 0; sue.n的HEX: 0 ; Num -2的HEX:FFFFFFFE
【use.n=-1; sue.n的HEX:FFFFFFFF ; Num -1的HEX:FFFFFFFF
【use.n= 0; sue.n的HEX: 0 ; Num0的HEX: 0
【use.n=-1; sue.n的HEX:FFFFFFFF ; Num1的HEX: 1
【use.n= 0; sue.n的HEX: 0 ; Num2的HEX: 2
【use.n=-1; sue.n的HEX:FFFFFFFF ; Num3的HEX: 3
请按任意键继续. . .
之后,我将buffer改成buffer;
运行结果:
【use.n=-1 【数值i=825307441
【use.n二进制=11111111111111111111111111111111
【use.n=-1; sue.n的HEX:FFFFFFFF ; Num -3的HEX:FFFFFFFD
【use.n= 0; sue.n的HEX: 0 ; Num -2的HEX:FFFFFFFE
【use.n=-1; sue.n的HEX:FFFFFFFF ; Num -1的HEX:FFFFFFFF
【use.n= 0; sue.n的HEX: 0 ; Num0的HEX: 0
【use.n=-1; sue.n的HEX:FFFFFFFF ; Num1的HEX: 1
【use.n= 0; sue.n的HEX: 0 ; Num2的HEX: 2
【use.n=-1; sue.n的HEX:FFFFFFFF ; Num3的HEX: 3
请按任意键继续. . .
页:
[1]