首页 - 常识问答 - 正文

程序开发中,1个字节一定包含8个位吗?C语言操作单个的位有什么技巧吗?

日期:2023-4-80 次浏览

1

1 个字节(Byte)等于 8 个位(bit)似乎已经是程序员间的常识了,很少有人质疑这一点。但是作为C语言程序员,我们常常要在不同的硬件平台上做底层开发,应该明白:1个字节等于8个位只是惯例而已,C语言标准并没有定义这一点。

有些编译器并不遵守这个惯例,例如,在 Texas 的 C55x DSP 的平台上,1 个字节等于 16 个位。在这个平台上,各种数据类型占用的位数有些奇怪:

以 long long 为例,在该平台上 long long 之所以等于 40 bit,而不是我们常用的 64 bit,是因为它们的 ALU 是 40 bit 宽,因此编译器规定 long long 为 40 bit 可以降低功耗和提升效率。

C语言操作位

C语言没有类似于 Java 的“垃圾回收”等高级编程语言特性,也不像 python 那样无需显示声明类型就能使用变量,因此在很多人看来,C语言有些“低级”。但是C语言的这些“低级”也是 C语言的优点——使用C语言开发程序,程序员能够准确知道究竟使用了多少资源,以及哪些资源还在内存里,哪些已经被释放。换句话说,C语言程序具备资源的使用确定性

2

一个字节一定是8个比特位!

C语言中操作某个位,主要用到以下操作符:

  1. “位与”:&
  2. “位或”:|
  3. “左移右移”:<<,>>
  4. “位取反”:~

如果想把第n个比特位清零,可执行如下代码:

char data;

data &= ~(1<<n);

如果想把第n个比特位置1,可执行如下代码:

char data;

data |= 1<<n;

3

一个字节肯定是8比特,人家就是这么定义的,位操作不推荐用位域,采用位操作符最好,为什么?因为可移植性,内存对齐

4

一个字节就是8bit。