有时你想控制某一位

有时你想控制某一位 - 图1

假设你需要一个结构,其中有很多表示“是”或“非”的值,可以用一些shortint来创建结构:

有时你想控制某一位 - 图2

这样做完全可行,但问题是,真/假的值只需要一位就能表示,short字段占了多得多的空间,太浪费了,要是结构的字段的值能只用一位表示就好了。

这就是发明位字段(bitfield)的原因。

有时你想控制某一位 - 图3

有时你想控制某一位 - 图4二进制位百宝箱

处理二进制值时,要是能够以某种方法在字面值中指定0和1就好了,比如:

  1. int x = 01010100;

可惜的是,C语言不支持二进制字面值,不过它支持十六进制字面值。每当C语言看到0x开头的数字,就认为它是以16为基数的数字:

有时你想控制某一位 - 图5

如何在十六进制与二进制之间进行转换?这比二进制与十进制之间的转换要容易些吗?是的,可以把十六进制数逐位转换为二进制数:

有时你想控制某一位 - 图6

每一个十六进制数对应一个长度为4的二进制数。只要知道数字0到15的二进制形式,就能很快地在心中完成转换。