但请问此处

来源:百度知道 编辑:UC知道 时间:2024/07/04 18:58:58
#include <stdio.h>

int main(void)
{
struct Bit {
int b8: 1;
int b7: 1;
int b6: 1;
int b5: 1;
int b4: 1;
int b3: 1;
int b2: 1;
int b1: 1;
} B;

unsigned char *p = NULL;

B.b1 = 1; B.b2 = 1; B.b3 = 1; B.b4 = 1; B.b5 =1; B.b6 = 1; B.b7 = 1; B.b8 = 1;
p = (unsigned char *)&B;
printf("%dn", *p); /* 255 */

B.b1 = 0; B.b2 = 0; B.b3 = 0; B.b4 = 0; B.b5 = 0; B.b6 = 0; B.b7 = 0; B.b8 = 1;
p = (unsigned char *)&B;
printf("%dn", *p); /* 1 */

B.b1 = 0; B.b2 = 0; B.b3 = 0; B.b4 = 0; B.b5 = 1; B.b6 = 1; B.b7 = 1; B.b8 = 1;
p = (unsigned char *)&B;
printf("%dn", *p); /* 15 */

B.b1 = 0; B.b2 = 1; B.b3 = 1; B.b4 = 1; B.b5 = 1; B.b6 = 1; B.b7 = 1; B.b8 = 1;
p = (unsigned char *)&B;
printf("%dn", *p); /* 127 */

getchar();

直接看内存就知道了

各个工具应该都能查看变量的memory dump

8位的2进制数,可以自己算算~
11111111
00000001
00001111
01111111

struct Bit是位结构。
位结构是一种特殊的结构, 在需按位访问一个字节或字的多个位时, 位结构比按位运算符更加方便。位结构定义的一般形式为:

struct位结构名{
数据类型 变量名: 整型常数;
数据类型 变量名: 整型常数;
} 位结构变量;

其中: 数据类型必须是int(unsigned或signed)。整型常数必须是非负的整数, 范围是0~15, 表示二进制位的个数, 即表示有多少位。
Bit实际上就是定义了一个字节的8位,具体数值自己算算就清楚了。

字符型的变量的范围是128-255;