加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

转换和字节顺序

发布时间:2020-12-16 09:50:42 所属栏目:百科 来源:网络整理
导读:表示为32位无符号整数的数字4将是 在大端机器上: 00000000 00000000 00000000 00000100(最重要的字节优先) 在小端机器上: 00000100 00000000 00000000 00000000(最重要的字节为最后一个) 作为8位无符号整数,它表示为 两台机器上都有00000100. 现在当将8位u
表示为32位无符号整数的数字4将是

在大端机器上:
00000000 00000000 00000000 00000100(最重要的字节优先)

在小端机器上:
00000100 00000000 00000000 00000000(最重要的字节为最后一个)

作为8位无符号整数,它表示为
两台机器上都有00000100.

现在当将8位uint转换为32位时,我总是认为在大端机器上意味着在现有字节前面粘贴24个零,并且如果机器是小端,则在末尾附加24个零.然而,有人指出,在这两种情况下,零都是前置而不是附加.但这不意味着在一个小端,00000100将成为最重要的字节,这将导致一个非常大的数字?请解释我错在哪里.

解决方法

如果你考虑数学值(它恰好也是大端表示),则前置零.

C中的演员总是努力保持价值,而不是代表.例如,这就是(int)1.25结果(*下面注释)在1中,而不是那些没有意义的东西.

正如评论中所讨论的那样,对于位移(以及其他按位操作)也是如此. 50>> 1 == 25,无论字节顺序如何.

(*注意:通常,取决于float->整数转换的舍入模式)

简而言之:无论代表性如何,C语言中的运算符都以数学值运算.一个例外是当你转换一个指向值的指针时(如(char *)& foo),从那以后它实际上是对同一数据的不同“视图”.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读