lark 发表于 2015-7-20 07:24:38

看下我的注释理解是否正确,多谢;

问题1:使用printf()打印,提示出错,为什么?
问题2:我自己的理解是否存在问题【注释里面的】
#include<stdio.h>
int main(void){
        struct tag_1{
                int a;       
        };//这里是定义一个整型变量;拥有sizeof(int)的大小; 32bitPC is 4byte;
        struct tag1_{
                int :0;
        };//记得哪里说的,按最大空间计算,也还是sizeof(int)的大小;
        /*那么,int:0;是占据1byte都是零,还是只占一个0位,或者不占位.应该是不占位了*/
        struct tag0{
                int a:3;               
        };//占据3bit的a,sizeof(tag0)也是sizeof(int);等于4;
        struct taga{
                int a:3;
                int b;
        };//int b;定义一个整型变量占据4byte,a:3占据3bit,但也是一个sizeof(int) ,所以sizeof(taga)=4+4=8;
        struct tagb{
                int a:1;
                int b:2;
                int c:3;
        };//1+2+3=6bit,sizeof(int)=4;
        struct bs{
                unsigned a:4;
                unsigned :0;//详见:"当无名域..8byte).c";偏移量sizeof(int);
                unsigned b:4;
                unsigned c:4;
        };
        printf("sizeof(tag1_)=%d;\n",sizeof(tag1_));
        printf("sizeof(int)=%d;\n",sizeof(int));
        printf("sizeof(struct tag_1)=%d;\n",sizeof(struct tag_1));
        printf("sizeof(struct tag0)=%d;\n",sizeof(struct tag0));
        printf("sizeof(struct taga)=%d;\n",sizeof(struct taga));
        printf("sizeof(struct tagb)=%d;\n",sizeof(struct tagb));
        printf("sizeof(struct bs)=%d;\n",sizeof(struct bs));
        //大家往这看,这是问题,问题在这里,就是这几个printf();
        //这是啥问题?有截图。我在C4droid编译通过,在C-Free和dev c++都是出问题的;
        //还有个问题就是,帮我看下我注释有没有啥问题?
        //其实就俩问题:看下注释,看下printf();
return 0;
}









默默路过 发表于 2015-7-20 07:24:39

#include<stdio.h>
int main(void){
      struct tag_1{
                int a;      
      };//这里是定义一个整型变量;拥有sizeof(int)的大小; 32bitPC is 4byte;
      struct tag1_{
                int :0;
      };//记得哪里说的,按最大空间计算,也还是sizeof(int)的大小;
      /*那么,int:0;是占据1byte都是零,还是只占一个0位,或者不占位.应该是不占位了*/
       /*这里的空没有使用,在结构体中有一个规定,如果结构体为空则存在一个没有意义的char,故此有一个字节*/
      struct tag0{
                int a:3;               
      };//占据3bit的a,sizeof(tag0)也是sizeof(int);等于4;
        //先定义了一个 32位的int, 其后前三位命名为a 并按整数的计算法则使用,这没有别的,故此 4个字节
      struct taga{
                int a:3;
                int b;
      };//int b;定义一个整型变量占据4byte,a:3占据3bit,但也是一个sizeof(int) ,所以sizeof(taga)=4+4=8;
        //这里前面部分同上先有int 后使用其前三位,之后的 再定义了一个完整的b;8个字节
      struct tagb{
                int a:1;
                int b:2;
                int c:3;
      };//1+2+3=6bit,sizeof(int)=4;
        //定义int 一次使用 1 2 3 个位,没有超过32不会开辟新的int; 4字节
      struct bs{
                unsigned a:4;
                unsigned :0;//详见:"当无名域..8byte).c";偏移量sizeof(int);
                //这里的是占用了当前int中剩下的所有未使用位28位
                unsigned b:4;//此处重新开辟int 32位
                unsigned c:4;
      };//所以结果是8字节

      struct bs_1{
                unsigned a:4;
                unsigned f:22;
                unsigned :0;//详见:"当无名域..8byte).c";偏移量sizeof(int);
                //这里的是占用了当前int中剩下的所有未使用位6位
                unsigned b:4;//此处重新开辟int 32位
                unsigned c:4;
      };//所以结果是8字节

      struct bs_2{
                unsigned a:15;
                unsigned f:20;
                //此处前面使用 15位 剩余17位 但是 新的f 需要20位 剩余位不足 固开辟新的 int
                unsigned :0;//详见:"当无名域..8byte).c";偏移量sizeof(int);
                //这里的是占用了当前(新开辟的)int中剩下的所有未使用位12位
                unsigned b:4;//此处重新开辟int 32位
                unsigned c:4;
      };//所以结果是12字节

        //新添加了两个例子,希望能有帮助!

      printf("sizeof(tag1_)=%d;\n",sizeof(tag1_));
      printf("sizeof(int)=%d;\n",sizeof(int));
      printf("sizeof(struct tag_1)=%d;\n",sizeof(struct tag_1));
      printf("sizeof(struct tag0)=%d;\n",sizeof(struct tag0));
      printf("sizeof(struct taga)=%d;\n",sizeof(struct taga));
      printf("sizeof(struct tagb)=%d;\n",sizeof(struct tagb));
      printf("sizeof(struct bs)=%d;\n",sizeof(struct bs));
      //大家往这看,这是问题,问题在这里,就是这几个printf();
      //这是啥问题?有截图。我在C4droid编译通过,在C-Free和dev c++都是出问题的;
      //还有个问题就是,帮我看下我注释有没有啥问题?
      //其实就俩问题:看下注释,看下printf();
return 0;
}

所有的注释都没什么问题吧,这个是 结构体定义的 按位使用,首先应该考虑的是定义的类型 其次是其使用的位数!
有几点要注意:每一个 内部变量的位长 不可以超出总位长; 单一内部变量 不可同时使用两个变量的位(只能存在一个变量的内部),长度不足时开辟新的变量空间;:0跳过单签变量空间中剩余未使用的部分,若后面再定义则重开变量空间;
我使用 VS2013 编译并运行,没有问题!结果都正常!

默.默 发表于 2015-7-22 22:00:37

:handshake

lark 发表于 2015-7-23 17:41:54

默.默 发表于 2015-7-22 22:00


{:7_130:}:hand shake

lwmheaton 发表于 2015-7-23 20:27:31

不懂~~~~帮顶·~~~:lol:

lark 发表于 2015-7-24 15:24:11

lwmheaton 发表于 2015-7-23 20:27
不懂~~~~帮顶·~~~

{:9_228:}

weisuo 发表于 2015-7-26 11:57:32

不懂 顶下把

cqj9006 发表于 2015-7-26 21:29:06


不懂 顶下把

lark 发表于 2015-7-27 16:21:52

cqj9006 发表于 2015-7-26 21:29
不懂 顶下把

:victory:谢谢

lark 发表于 2015-7-27 16:23:15

weisuo 发表于 2015-7-26 11:57
不懂 顶下把

:handshake:victory:

阔怀 发表于 2015-8-5 11:37:56

好多,帮顶下

俞晨曦 发表于 2015-8-12 20:47:39

位段,没听啊.楼主为什么要纠结这个长度问题呢

lark 发表于 2015-8-15 23:22:56

俞晨曦 发表于 2015-8-12 20:47
位段,没听啊.楼主为什么要纠结这个长度问题呢

因为别人都说我喜欢钻牛角尖;基本上挂死在一个树上的料

lark 发表于 2015-8-15 23:23:31

阔怀 发表于 2015-8-5 11:37
好多,帮顶下

谢谢{:7_113:}
页: [1]
查看完整版本: 看下我的注释理解是否正确,多谢;