第十五章 位操作——《C Primer Plus》笔记

2023-03-26  本文已影响0人  One2INF

第十五章 位操作

15.1 二进制数、位和字节

二进制数(binary number):以 2 为基底表示的数字。

C 语言用字节表示存储系统字符集所需的大小,所以 C 字节可能是 8 位,9 位,16 位或其他值。通常为 8 位。

二进制补码(two's-complement):

一个二进制补码的相反数,各位取反加一,因为不是对称的。

0 - 127,-128 - -1

二进制小数

0.101 = 1/2 + 0/4 + 1/8

15.2 其他进制数

八进制,十六进制

15.3 C 按位运算符

用法

移位运算符

15.4 字段

位字段(bit field):signed intunsigned int 类型变量中的一组相邻的位。

struct
{
  unsigned int field1 : 1;
  unsigned int        : 2;
  unsigned int field2 : 1;
  unsigned int        : 0;
  unsigned int field3 : 1;
}

15.5 对齐特性(C11)

_Alignof 给出一个类型的对齐要求。

_Alignas 指定一个变量或类型的对齐值。

_Alignas(double) char c1;
_Alignas(8) char c2;
unsigned char _Alignas(long double) c_arr[sizeof(long double)];

C11 还在 stdlib.h 库中添加了一个新的内存分配函数,用于动态分配的内存。

void *aligned_alloc(size_t alignment, size_t size);
上一篇下一篇

猜你喜欢

热点阅读