当前位置:  开发笔记 > 编程语言 > 正文

嵌入式C:var = 0xFF是什么; 做?

如何解决《嵌入式C:var=0xFF是什么;做?》经验,为你挑选了4个好方法。

我是第一次使用嵌入式C语言.虽然我的C是生锈的,但我可以阅读代码,但我并没有真正理解为什么某些行是这样的.例如,我想知道变量是true还是false并将其发送回另一个应用程序.原始实现者不是将变量设置为1或0,而是选择0xFF.

他试图将它设置为地址空间吗?或者为什么将布尔变量设置为255?



1> QuantumPete..:

0xFF 设置char中的所有位.

最初的实施者可能决定该标准01不够好,并决定,如果所有的位假的,那么所有的位真实的.

这是有效的,因为在C中任何0以外的值都是真的.虽然这将设置char中的所有字节,但它也适用于任何其他变量类型,因为在变量中设置的任何一个位都使其成立.


0xFF设置char中的所有位.它对整数的作用是依赖于implementation/size/signed
顺便说一下,这也是VB使用值-1表示真值,0表示假值的原因.-1是2的赞美中的全部1.

2> mfx..:

如果你迫切需要内存,你可能想要在一个字节中存储8个布尔值(或者在一个字节中存储32个,或者其他)

这可以通过使用标志掩码轻松完成:

  // FLAGMASK = ..1<

这仅在booleanFunction()返回0(所有位清零)或-1(所有位设置)时有效.


这是原始问题的答案吗?

3> Cade Roux..:

0xFF是〜0的十六进制表示(即11111111)

例如,在VB和Access中,-1用作True.



4> Olof Forshel..:

这些年轻人,他们知道什么?

在一种原始的嵌入式语言中 - PL/M(-51是,如8051,-85,-86,-286,-386) - 逻辑运算符之间没有区别(!,&&,||在C中)和按位(〜,&,|,^).相反,PL/M有NOT,AND,OR和XOR处理这两个类别.我们最好有两个类别吗?我不确定.但我错过了C中的逻辑^^运算符(xor).不过,我想我可以在C中构建程序,而不必涉及逻辑类别.

在PL/M中,False定义为0.布尔值通常用字节变量表示.True定义为NOT False,它将为您提供0ffh(C的0xff为PL/M-ese).

为了查看状态标志进位的转换是如何在一个字节中存储的(布尔值不能作为类型)变量,PL/M可以在存储之前使用汇编指令"sbb al,al".如果设置了进位,则al将包含0ff,如果不是,则包含0h.如果需要相反的值,PL/M将在sbb之前插入"cmc"或在之后附加"not al"(实际上是xor - one或其他).

因此,TRUE的0xff是PL/M的直接兼容端口.必要?可能不是,除非你不确定你的技能(在C中)并且玩它超级安全.

就像我一样.

PL/M-80(用于8080,8085和Z80)不支持整数或浮点数,我怀疑PL/M-51也是如此.PL/M-86(用于8086,8088,80188和80186)增加了整数,单精度浮点,段:偏移指针和标准内存模型,小型,中型,紧凑型和大型.对于那些如此倾向的人来说,有一些特殊的指令来创建自己动手的混合记忆模型.微软巨大的内存模型相当于英特尔的大型内存.MS还提供小型,小型,紧凑型,中型和大型型号.

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有