鱼C论坛

 找回密码
 立即注册
查看: 1699|回复: 11

数组空间的大小和二进制的打印,位域

[复制链接]
发表于 2015-7-23 19:10:44 | 显示全部楼层 |阅读模式
5鱼币
插入代码:(问题在代码的注释里面)

  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. int main(void){
  4.         int i=-3;
  5.         char str[3]; //这里和问题相关
  6.        
  7.         struct bin{
  8.         signed char n:1;       
  9.         }use;
  10.        
  11.         printf("---------------\n ");
  12.         printf("n=%d;n2=%d;\n",use.n);
  13.         printf("---------------\n\n");
  14.        
  15.         while(i<=3){
  16.                 use.n=i;
  17.                 itoa(use.n,str,2);
  18.                 printf("use.n=%2d  i=%2d bin:%s\n",use.n,i,str);
  19.                 i++;       
  20.         }
  21.         return 0;
  22. }

  23. //为什么当数组空间不够大的时候,只打印 n=-1呢?  
复制代码

运行结果

运行结果

时间:2013年7月23日19:11:55;

最佳答案

查看完整内容

int i=-3;定义成全局变量。应该不会这样。好像是堆栈出问题了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-7-23 19:10:45 | 显示全部楼层
int i=-3;定义成全局变量。应该不会这样。好像是堆栈出问题了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-7-24 09:23:37 | 显示全部楼层
本帖最后由 yjip267 于 2015-7-24 09:25 编辑

signed char n:1;   占一位并且是有符号的。而-3的占4个字节0xfdffffff,这个样的。就是把0Xfd第一位赋给了N,所以是-1,而不是数据不够大。

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
lark + 1 + 1 谢谢回答,但是我还是有些不太清楚

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-7-26 12:11:37 | 显示全部楼层
我是知道的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-7-26 12:12:19 | 显示全部楼层
00000
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-7-26 12:12:57 | 显示全部楼层
大哥啊啊啊

评分

参与人数 1荣誉 -2 鱼币 -2 收起 理由
ryxcaixia -2 -2 请不要无意义灌水!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-7-26 12:13:54 | 显示全部楼层
大哥啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-7-27 16:25:29 | 显示全部楼层

不好意思,我一天只上一次论坛,或者几天上一次论坛,回复也就慢了。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-7-27 16:38:10 | 显示全部楼层
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的数值会发生变化?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-7-27 17:30:33 | 显示全部楼层
yjip267 发表于 2015-7-24 09:23
signed char n:1;   占一位并且是有符号的。而-3的占4个字节0xfdffffff,这个样的。就是把0Xfd第一位赋给了N ...
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. int main(void){
  4.         char str[40];
  5.         printf("char=%c,int=%d;\n",(signed char)0xfd,(signed int)0xfd);
  6.         itoa(0xfd,str,2);
  7.         printf("0xf=\n%s\n",str);
  8.         return 0;
  9. }
复制代码

打印结果:
  1. char=?int=253;
  2. 0xf=
  3. 11111101
  4. 请按任意键继续. . .
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-7-28 10:33:23 | 显示全部楼层
while(i<=3)
{
                use.n=i;
                itoa(use.n,str,2);
                printf("use.n=%2d  i=%2d bin:%s\n",use.n,i,str);
                i++;        
        }
其中i的值从-3到2,十六进制0xfffffffd,0xfffffffe,0xfffffff,0,1,2,而D,E,F ,0,1,2, 第二进制最后一位都有变化的。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-7-29 17:08:13 | 显示全部楼层
本帖最后由 lark 于 2015-7-29 17:09 编辑


感觉回答和我的问题不一样?我一直搞不懂
这是正常的代码,我修改的:
  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. int main(void){
  4.         int i=-3;
  5.         char buffer[32];
  6.         
  7.                 //char buffer[3];
  8.                 //这里的改动会造成数据溢出;将32个1或0存入只有3byte大小的buffer中,
  9.         //怎么可能?
  10.         
  11.         struct bin{
  12.                 signed char n:1;        
  13.         }use;
  14.         
  15.         //DEC&BIN mode;
  16.         while(i<=3){
  17.                 use.n=i;
  18.                 itoa(use.n,buffer,2);
  19.                       printf("【use.n=%2d 【数值i=%d\n【use.n二进制=%s \n\n",use.n,i,buffer);
  20.                 i++;
  21.         }
  22.         putchar('\n');
  23.         i=-3;
  24.         
  25.         //HEX mode;
  26.         while(i<=3){
  27.                 use.n=i;
  28.                 printf("【use.n=%2d; sue.n的HEX:%8X ;   Num %2d的HEX:%8X\n",use.n,use.n,i,i);
  29.                 i++;        
  30.         }
  31.         putchar('\n');
  32.         return 0;
  33. }

复制代码

运行结果:
  1. 【use.n=-1 【数值i=-1
  2. 【use.n二进制=11111111111111111111111111111111

  3. 【use.n= 0 【数值i=0
  4. 【use.n二进制=0

  5. 【use.n=-1 【数值i=1
  6. 【use.n二进制=11111111111111111111111111111111

  7. 【use.n= 0 【数值i=2
  8. 【use.n二进制=0

  9. 【use.n=-1 【数值i=3
  10. 【use.n二进制=11111111111111111111111111111111


  11. 【use.n=-1; sue.n的HEX:FFFFFFFF ;   Num -3的HEX:FFFFFFFD
  12. 【use.n= 0; sue.n的HEX:       0 ;   Num -2的HEX:FFFFFFFE
  13. 【use.n=-1; sue.n的HEX:FFFFFFFF ;   Num -1的HEX:FFFFFFFF
  14. 【use.n= 0; sue.n的HEX:       0 ;   Num  0的HEX:       0
  15. 【use.n=-1; sue.n的HEX:FFFFFFFF ;   Num  1的HEX:       1
  16. 【use.n= 0; sue.n的HEX:       0 ;   Num  2的HEX:       2
  17. 【use.n=-1; sue.n的HEX:FFFFFFFF ;   Num  3的HEX:       3

  18. 请按任意键继续. . .
复制代码

之后,我将buffer[32]改成buffer[3];
运行结果:
  1. 【use.n=-1 【数值i=825307441
  2. 【use.n二进制=11111111111111111111111111111111


  3. 【use.n=-1; sue.n的HEX:FFFFFFFF ;   Num -3的HEX:FFFFFFFD
  4. 【use.n= 0; sue.n的HEX:       0 ;   Num -2的HEX:FFFFFFFE
  5. 【use.n=-1; sue.n的HEX:FFFFFFFF ;   Num -1的HEX:FFFFFFFF
  6. 【use.n= 0; sue.n的HEX:       0 ;   Num  0的HEX:       0
  7. 【use.n=-1; sue.n的HEX:FFFFFFFF ;   Num  1的HEX:       1
  8. 【use.n= 0; sue.n的HEX:       0 ;   Num  2的HEX:       2
  9. 【use.n=-1; sue.n的HEX:FFFFFFFF ;   Num  3的HEX:       3

  10. 请按任意键继续. . .
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-20 15:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表