struct tag {
unsigned int a :1 //占一个bit
unsigned int b :7//占7个bit
}
这种东西在C++中不一定还支持,而且在现实的计算机中,空间往往不值得费这么大劲,编译器往往会把两个字节的东西优化为四个字节(为了速度,牺牲空间),更不要说这种计较每个bit的方法了。
如果必须要用,我建议你用位操作。比如 int a//4个byte,32个bit
a |= 0x03//把末两个bit都置为1
a = (a &~0x00FF) | (b &0xFF)//把a的低8位置为b的低八位。
等等。。。
不是C语言里的,而是C51里面的。
区别在于功能不同:
bit:是变量类型,相当于boot 只占一个位,最多可定128个bit变量。
sbit:是给可位寻址的变量(或特殊功能寄存器)的某一个位定个别名,不另占空间。
扩展资料:
单片机中C语言sbit使用方法——
1、bit位标量。
bit位标量是c51编译器的一种扩充数据类型,利用它可以定义一个位标量,但是不能定义位指针,也不能定义位数组。它的值是一个二进制位,不是0或1,类似boolean中的true和false。
2、sfr特殊功能寄存器。
sfr也是一种扩充数据类型,点用一个内存单元,值域为0~255.利用它可以访问51单片机内部的所有特殊功能寄存器。如果sfr P1 = 0x90,这一句定P1为P1端口在片内的寄存器,在后面的语句中我们可以用P1=255(对P1端口的所有的引脚置高电平)之类的语句来操作特殊功能寄存器。
sfr是定义8位的特殊功能寄存器而sfr16 则是定义16位特殊功能寄存器。