C语言或c++能不能直接使用“比特”

Python016

C语言或c++能不能直接使用“比特”,第1张

我记得C语言中有一种叫做“位段”的东西,但是不知道现在的编译器是不是还支持:

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位特殊功能寄存器。