编程语言里怎么没有 bit 这样的类型

2021-01-04 09:25:06 +08:00
 zxCoder
3601 次点击
所在节点    问与答
31 条回复
weyou
2021-01-04 09:32:20 +08:00
参见语言: 位域( bit-field )
fengxuejuan
2021-01-04 09:34:17 +08:00
建议去看 verilog,

除了 bit 没别的类型。
zhuyongqi9
2021-01-04 09:49:03 +08:00
C51 里有 /狗头
raaaaaar
2021-01-04 10:08:44 +08:00
计算机不是以 byte 为最小单位吗
clino
2021-01-04 10:11:23 +08:00
有没有 bit 是方式方法,但是应该首先考虑要解决什么问题,你要 bit 类型想解决的问题是什么呢?
Takashi123
2021-01-04 10:35:30 +08:00
位段
SuperMild
2021-01-04 10:35:56 +08:00
一个 bit 通常没有用啊,多个 bit 连起来就是 byte 或者二进制数字了。
rainman777
2021-01-04 10:38:05 +08:00
bool
opengps
2021-01-04 10:38:33 +08:00
因为你学的是高级语言,你用的各种类型已经被封装过了
rainman777
2021-01-04 10:40:02 +08:00
但是 bool 好像也是占 8bit...
zxCoder
2021-01-04 10:44:26 +08:00
@SuperMild 一些底层协议不是一般都是几位几位的算嘛
lxilu
2021-01-04 10:44:30 +08:00
@opengps 汇编能直接控制 bit ?
OysterQAQ
2021-01-04 10:46:43 +08:00
内存机构的最小寻址单位为 1Byte
updateing
2021-01-04 10:47:55 +08:00
@zxCoder 协议里面操作 bit 的时候用的是位域。
misaka19000
2021-01-04 10:52:36 +08:00
@opengps #9 能不能操作 bit 看硬件不看语言
agagega
2021-01-04 11:04:04 +08:00
因为通常来说在语言里加入一个类型,在指令集上就需要对应的寄存器和一组相关的指令。很多指令集架构都不支持单独操作某个 bit 的指令,更没有只有 1 个 bit 的寄存器。而如果真的要表示 bit 的时候,用 byte 模拟就行了。你可以参考 LLVM 中不同目标平台对 i1 类型的处理。
yolee599
2021-01-04 11:11:39 +08:00
Verilog HDL 了解一下?
opengps
2021-01-04 11:16:35 +08:00
@lxilu
@misaka19000
从道理上来讲,编程语言都得依赖底层 bit,只不过能否操纵得看是否这门语言对外留了处理方式,我用 C#开发车载 GPS 用途的 socket 服务器,有些通信包解析的时候,就是用的 bit 来标识传感器状态的,C#的 string 类有个 Convert 可以直接转换为二进制,然后拿到特定 bit 位的值是 0 还是 1 。
至于 C#直接操作比特位,则需要在类前面加 unsafe 关键字,大部人学了 C#很久可能也没用到过这个,但是用到了异或校验等位运算的时候,就必然得用到了
BingoXuan
2021-01-04 11:20:33 +08:00
用 long+bit mask 模拟就好了。硬件寄存器都是这样子,一个 byte 可能映射了 3-4 个功能,某个功能取决于某个 bit 的电平高低。
systemcall
2021-01-04 11:27:32 +08:00
有的,c51 C 就支持 sbit
嵌入式用的很多吧,按位寻址、字节寻址,都有的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/741367

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX