比如:一个字节=8bit计算机中用16表示一个数,比如0001 0001 1001 0001 ; 0001 0001就为高字节,1001 0001为低字节。0001 0001 1001 0001B(或者1191H)11H 91H说通俗点,就是把一个数用编码表示出来(一般十六进制或二进制),左边的一半数为高,右边一半数为低。
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
在看图形处理源码的时候有一段宏看不懂,就写了一个demo自己看了一下。还是不大熟悉C语言的位操作。
这个宏挺有意思
注意 括号的位置很重要
((const uint8_t*)(x)) 这相当于把x所在的内存当做一段uint8类型的指针,索引x的第0位,因为是小端机,低位存低字节,所以[0]位存的是低字节,[1]位存的是高字节。
这样想的话,这个宏其实很简单了,就是把16位的无符号数,按照8位一个单位高低位互换
事实也证明如此,程序输出如下
①理论
共用体和结构体类似,
区别在于:
共用体成员共享一段公共存储空间。
占字节多的成员决定共用体总字节,
占字节少的成员在总字节的低位。
高低字节可简单理解为:
1100,00就是低字节,11就是高字节。
~
②说明
#include<stdio.h>
/*共用体类型的说明*/
union change
/*共用体类型的标志:union
共用体标识名:change */
{char c[2]
short int a}
/*共用体类型的两个成员:c[2]和a。
2个字符占2个字节,一个短整型占2个字节。即占字节多的a,可以拆分成占字节少的2个字符。低位字节c[0],高位字节c[1]。*/
un
/*共用体类型的变量: un*/
~
③主函数
main()
{un.a=16961
/*短整型a赋值为16961,
对应二进制码为100001001000001。
分成两段:
高位c[1]和低位c[0]
01000010和01000001
还原成整型:66和65
ASCLL码对应字符:'B'和'A'*/
printf("%d,%c\n",un.c[0],un.c[0])
/*输出un.c[0]为66,'B'。*/
printf("%d,%c\n",un.c[1],un.c[1])}
/*输出un.c[1]为65,'A'。*/