当前位置:天才代写 > tutorial > C语言/C++ 教程 > 有标记及无标记位域值的测试

有标记及无标记位域值的测试

2017-11-01 08:00 星期三 所属: C语言/C++ 教程 浏览:835

措施如下:

#include <stdio.h>
#include <stdlib.h>
    
struct bitint
{
        int a:2;
        int b:2;
        int c:1;
};
    
int main()
{
        struct bitint test;
        test.a = 1;
        test.b = 3;
        test.c = 1;
        printf("a is %d b is %d c is %d\n", test.a, test.b, test.c);
        return 0;
}

功效为:

v0id@ubuntu:~/test$ ./a.out

a is 1 b is -1 c is -1

因为首先范例为int,也等于有标记数,那么必需是有标记位的,那么也就是a,b,c这三个数的城市占一个标记位,标记为1的时候暗示是负数,而a,b,c赋值后,在此的二进制为:a=1; b=11;c=1; 又由于b和c已经把标记位给填充了,所以b和c在此就是负数了,所以功效也就是把标记位上的值转换为正或负。

那么假如是越界了的功效呢?

修改test.b的值为4,二进制为100,已经越界了,那么在此时test.b的功效应该是0,因为越界了后,只是取的后两位的值,即为00,所以功效为0了

修改test.b的值为7,二进制的值为111,也越办了,取低位的两位为11,功效为-1,依次类推即可。

同理,当功效体为无标记数时,差异是把标记位也参入了最后功效的运算,不再有标记位,可是越界的处理惩罚是一样的。如把上面的布局体修改为无标记的,功效为:

unsigned int a:2;

unsigned int b:2;

unsigned int c:1;

v0id@ubuntu:~/test$ ./a.out

a is 1 b is 3 c is 1

修改test.b的值为4,功效为:0

修改test.b的值为7,功效为:3

From:csdn博客 yygydjkthh

 

    关键字:

天才代写-代写联系方式