1
weyou 2021-01-04 09:32:20 +08:00 via Android 1
参见语言: 位域( bit-field )
|
2
fengxuejuan 2021-01-04 09:34:17 +08:00 3
建议去看 verilog,
除了 bit 没别的类型。 |
3
zhuyongqi9 2021-01-04 09:49:03 +08:00
C51 里有 /狗头
|
4
raaaaaar 2021-01-04 10:08:44 +08:00 via Android
计算机不是以 byte 为最小单位吗
|
5
clino 2021-01-04 10:11:23 +08:00 1
有没有 bit 是方式方法,但是应该首先考虑要解决什么问题,你要 bit 类型想解决的问题是什么呢?
|
6
Takashi123 2021-01-04 10:35:30 +08:00
位段
|
7
SuperMild 2021-01-04 10:35:56 +08:00
一个 bit 通常没有用啊,多个 bit 连起来就是 byte 或者二进制数字了。
|
8
rainman777 2021-01-04 10:38:05 +08:00
bool
|
9
opengps 2021-01-04 10:38:33 +08:00 via Android
因为你学的是高级语言,你用的各种类型已经被封装过了
|
10
rainman777 2021-01-04 10:40:02 +08:00
但是 bool 好像也是占 8bit...
|
13
OysterQAQ 2021-01-04 10:46:43 +08:00
内存机构的最小寻址单位为 1Byte
|
15
misaka19000 2021-01-04 10:52:36 +08:00
@opengps #9 能不能操作 bit 看硬件不看语言
|
16
agagega 2021-01-04 11:04:04 +08:00 via iPhone
因为通常来说在语言里加入一个类型,在指令集上就需要对应的寄存器和一组相关的指令。很多指令集架构都不支持单独操作某个 bit 的指令,更没有只有 1 个 bit 的寄存器。而如果真的要表示 bit 的时候,用 byte 模拟就行了。你可以参考 LLVM 中不同目标平台对 i1 类型的处理。
|
17
yolee599 2021-01-04 11:11:39 +08:00
Verilog HDL 了解一下?
|
18
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#很久可能也没用到过这个,但是用到了异或校验等位运算的时候,就必然得用到了 |
19
BingoXuan 2021-01-04 11:20:33 +08:00
用 long+bit mask 模拟就好了。硬件寄存器都是这样子,一个 byte 可能映射了 3-4 个功能,某个功能取决于某个 bit 的电平高低。
|
20
systemcall 2021-01-04 11:27:32 +08:00
有的,c51 C 就支持 sbit
嵌入式用的很多吧,按位寻址、字节寻址,都有的 |
21
systemcall 2021-01-04 11:28:00 +08:00
@OysterQAQ #13
看看 c51,可以按位寻址 |
22
ruokw 2021-01-04 12:52:56 +08:00 via Android
内存寻址顶多到 byte,就算语言层面定一个 bit 类型,还是得寻址到 byte
|
23
Jirajine 2021-01-04 13:31:58 +08:00 via Android
一般来说 byte 用得比较多,二进制协议、格式等都是以 byte 为最小单位。
|
24
fuchunliu 2021-01-04 13:40:29 +08:00 via Android
bit 一般操作寄存器才会用吧,不做硬件的给你这个类型,你还是占一字节内存,这不是脱了裤子放屁嘛
|
25
icyalala 2021-01-04 13:43:28 +08:00
这到底还是历史问题。。
曾经 Intel 还没出来的时候,不少处理器和磁带都是一次操作 6-bit 。 Intel 4004 是按 4-bit chunks 来处理的, 但是从 8086 开始,后面的新处理器基本都是用 8-bit byte 作为最小操作单位了, 再往后随着 CPU 升级,实际 CPU 每次处理 bit 数是提升的,但是出于兼容考虑或者历史原因,byte 仍然是对外的最小处理单位。 说起来 1byte 也不一定就等于 8bit 。。 |
26
chitanda 2021-01-04 14:02:32 +08:00
char??
|
27
letking 2021-01-04 14:06:28 +08:00
对大多数语言来说,你可以用位运算实现 bit 级别的控制和运算,但是空间占用上只能以 8bit 为最小单位了,再小也没必要了——最多也就浪费 7bit 的空间而已,没必要单独搞一个 bit 类型出来。
|
28
b1eberg0n 2021-01-04 14:17:01 +08:00
Erlang:?
|
29
sampeng 2021-01-04 14:38:34 +08:00 via iPhone
如果接口文档里这没写:嗨,给我一个 32bit 的字符串。
|
30
systemcall 2021-01-04 21:02:01 +08:00
|
31
SmallTeddy 2021-01-05 09:49:35 +08:00
计算机中使用的二进 bai 制数 du 共有 3 个单位:位,字节,字。
位(bit)(b)音译为比特。位 bai 是计算机存储数 du 据的最小单位。一 zhi 个位只能表示 0 和 1 两种状态。 字节(byte)音译为"拜特",常以大写字母"B"表示字节。字节是最基本的数据单位。8 位二进制数为一个字节。 8bit ( 8b ) = 1byte ( 1B )之后就是 KB,MB,GB,TB |