十六进制数字在计算机中是一种表示方式,它与数据类型的存储大小有关。在常见的数据类型中,以下是十六进制数值的存储情况:
整数类型:
uint8_t:无符号 8 位整数,存储一个字节(8 比特)。
uint16_t:无符号 16 位整数,存储两个字节(16 比特)。
uint32_t:无符号 32 位整数,存储四个字节(32 比特)。
uint64_t:无符号 64 位整数,存储八个字节(64 比特)。
浮点数类型:
float:单精度浮点数,通常存储四个字节。
double:双精度浮点数,通常存储八个字节。
字符类型:
char:通常是一个字节,即 8 比特。
因此,当我们说一个十六进制数字占用多少字节时,这取决于它的数据类型。例如,一个 uint8_t 类型的变量存储一个十六进制数值时,占用一个字节(8 比特),而一个 uint16_t 类型的变量则占用两个字节(16 比特)。
总结起来,十六进制数字的存储空间取决于其所在的数据类型,而不是十六进制本身占据多少字节。
对于十六进制数 0xFFFF:
0xFFFF 表示一个十六位二进制数。
十六进制 0xFFFF 对应的二进制是 1111111111111111。
这个二进制数有十六位(16 比特)。
在不同的数据类型中,0xFFFF 的存储空间会有所不同:
如果是 uint16_t 类型,它是一个无符号 16 位整数,正好可以存储 0xFFFF,因为它占用两个字节(16 比特)的存储空间。
如果是 uint32_t 类型,它是一个无符号 32 位整数,0xFFFF 将只占用其中的低 16 位,但仍然占用四个字节(32 比特)的存储空间,高 16 位则为零。
如果是 uint8_t 类型,它只能存储一个字节(8 比特),因此 0xFFFF 将被截断为 0xFF,只能存储低位的 0xFF。
当我们谈论位运算中的左移 (<<) 和右移 (>>) 时,它们是指对二进制数进行移位操作的运算符。
左移运算 (<<)
左移运算符 (<<) 将一个数的各二进制位全部左移若干位,右边空出的位用 0 填补。具体来说,如果对一个数 A 进行左移 n 位操作 (A << n),则:
意味着将 A 的二进制表示向左移动 n 位。
移动过程中,左边的位数会丢弃,右边的空位用 0 填充。
左移 n 位实际上相当于将 A 乘以 2^n。
例如,如果 A 的二进制表示为 1010,那么 A << 2 将得到 101000,即十进制的 40。
右移运算 (>>)
右移运算符 (>>) 则将一个数的各二进制位全部右移若干位。右移时,根据操作数的类型可能使用符号扩展(对有符号数)或者用 0 填充(对无符号数)。具体来说,对一个数 B 进行右移 n 位操作 (B >> n),则:
意味着将 B 的二进制表示向右移动 n 位。
对于无符号数,右移过程中左边的位数用 0 填充。
对于有符号数,右移过程中左边的位数会用符号位(即最高位)填充。
右移 n 位实际上相当于将 B 除以 2^n 并向下取整。
例如,如果 B 的二进制表示为 1010,那么 B >> 2 将得到 10,即十进制的 2。
这些运算在编程中常用于对数据进行快速的乘除操作,或者对位操作进行优化。
sprintf函数的使用
这里要特别提一下这个函数,这是C标准库中的一个函数,在我们的STM32平台上也有实现。这个函数可以把数据格式化为字符串,把数据作为字符的形式显示出来非常的实用。