暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

一个字节在Oracle中如何表示?

开始使用bbed工具研究Oracle结构时,字节的底层表示是我们容易混淆的问题,以下是我对于该问题的一些思考和总结,希望对大家的学习有所帮助,本小节以Oracle kcbh结构为例,

BBED> p kcbh

struct kcbh, 20 bytes @0

ub1 type_kcbh @0 0x06

ub1 frmt_kcbh @1 0xa2

ub1 spare1_kcbh @2 0x00

ub1 spare2_kcbh @3 0x00

ub4 rdba_kcbh @4 0x004001fe

ub4 bas_kcbh @8 0x00017af4

ub2 wrp_kcbh @12 0x0000

ub1 seq_kcbh @14 0x01

ub1 flg_kcbh @15 0x06 (KCBHFDLC, KCBHFCKV)

ub2 chkval_kcbh @16 0x73d0

ub2 spare3_kcbh @18 0x0000

frmt_kcbh字段存储的值为0xa2,ub1表示该字段大小为1 byte,那么为什么0xa2可以表示1 byte呢?为什么不是“a”表示1 byte,“2”表示1 byte,合计大小为2 bytes?

解释该问题涉及计算机基础概念,现代计算机存储和处理的信息以二值信号表示,即计算机底层只存储和处理0和1两个值,每一位二进制数字称为位(bit),8个bit称为一个字节(byte),大多数计算机使用字节做为最小的可寻址的内存单元,以0x或0X开头的数字常量被认为是十六进制的值。因此对frmt_kcbh字段的值详细解释如下,

ub1 --大小为1字节

frmt_kcbh --定义字段名称

@1 --偏移量

0xa2 --十六进制表示

问题答案:0xa2为一个字节的16进制表示。理解位(bit)、字节(byte)和十六进制表示的基础概念,是我们继续深入学习的基础。

《深入理解计算机系统》中十六进制表示法解释如下:

一个字节由8位组成,在二进制表示法中,它的值域是00000000–11111111。如果看成十进制整数,它的值域就是0–255。两种符号表示法对于描述位模式来说都不是非常方便。二进制表示法太冗长,而十进制表示法与位模式的互相转化很麻烦。替代的方法是,以16为基数,或者叫做十六进制数,来表示位模式。十六进制使用数字‘0’–‘9’以及字符‘A’–‘F’来表示16个可能的值。

最后修改时间:2021-04-22 11:15:17
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论