zxCoder
V2EX  ›  问与答

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

  •  
  •   zxCoder · Jan 4, 2021 · 4691 views
    This topic created in 2139 days ago, the information mentioned may be changed or developed.
    31 replies  •  2021-01-05 09:49:35 +08:00
    weyou
    weyou
    Jan 4, 2021 via Android❤️1
    1
    参见语言: 位域( bit-field )
    fengxuejuan
    fengxuejuan
    Jan 4, 2021❤️3
    2
    建议去看 verilog,

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

    曾经 Intel 还没出来的时候,不少处理器和磁带都是一次操作 6-bit 。
    Intel 4004 是按 4-bit chunks 来处理的,
    但是从 8086 开始,后面的新处理器基本都是用 8-bit byte 作为最小操作单位了,
    再往后随着 CPU 升级,实际 CPU 每次处理 bit 数是提升的,但是出于兼容考虑或者历史原因,byte 仍然是对外的最小处理单位。

    说起来 1byte 也不一定就等于 8bit 。。
    chitanda
    chitanda
    Jan 4, 2021
    26
    char??
    letking
    letking
    Jan 4, 2021
    27
    对大多数语言来说,你可以用位运算实现 bit 级别的控制和运算,但是空间占用上只能以 8bit 为最小单位了,再小也没必要了——最多也就浪费 7bit 的空间而已,没必要单独搞一个 bit 类型出来。
    b1eberg0n
    b1eberg0n
    Jan 4, 2021
    28
    Erlang:?
    sampeng
    sampeng
    Jan 4, 2021 via iPhone
    29
    如果接口文档里这没写:嗨,给我一个 32bit 的字符串。
    systemcall
    systemcall
    Jan 4, 2021
    30
    @ruokw #22
    看硬件吧。有的就是可以按位寻址的,有的按字节、双字甚至别的方式寻址。和硬件实现有关系
    @chitanda #26
    char 什么时候是 bit 了?而且如果是现在的 PC,好像是会转成 int 之类的
    SmallTeddy
    SmallTeddy
    Jan 5, 2021
    31
    计算机中使用的二进 bai 制数 du 共有 3 个单位:位,字节,字。
    位(bit)(b)音译为比特。位 bai 是计算机存储数 du 据的最小单位。一 zhi 个位只能表示 0 和 1 两种状态。
    字节(byte)音译为"拜特",常以大写字母"B"表示字节。字节是最基本的数据单位。8 位二进制数为一个字节。
    8bit ( 8b ) = 1byte ( 1B )之后就是 KB,MB,GB,TB
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   961 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 119ms · UTC 19:44 · PVG 03:44 · LAX 11:44 · JFK 14:44
    ♥ Do have faith in what you're doing.