在VB中怎么改变一个2进制数其中的任意一位的状态?

我现在要控制I/O的输出,读出来是十进制的整数,比如说123 ,把123转换成2进制之后是1111011,这是输出的状态,我现在要把第三位的0改成1,其他位不变,然后输出,请问大家我应该怎么计算才能得出这个十进制的数据,然后传给输出寄存器?

这个要熟悉位运算。

"位运算就是对字节或字节内的二进制位数进行测试、抽取、设置或移位等操作。因此位运算不能是float、double、long double等其他复杂的数据类型,只能是标准的char和int数据类型"(在VB中意味着可以对byte、integer、long类型进行位运算操作。

以上摘自《C语言程序设计》--人民邮电出版社一书,我自学C语言用的教材。建议你学习一些C语言的基本知识,因为C语言比VB更贴近硬件,因此能够帮助你理解一些VB中的概念。

C语言中的基本的位运算操作有按位与,按位或,按位异或,按位置反以及左、右移位操作。

VB中我只用过按位与(AND)、按位或(OR)、按位异或(XOR)。其他的需要自己添加代码模拟。

具体各位运算的含义可以自己查阅相关文献、书刊。空间有限,我就不贴出来了。

你应该知道的常识:
(一)1 Byte = 8 bit 一个字节在存储器中占8位;
(二)在VB中,integer类型的范围为-32768(-2^15)~ 32767(2^15-1),占两个字节,总共16位;
(三)计算机内存中,所有数据都以二进制格式存储。正数的最高位为0,后面的0/1序列与其绝对值的二进制形式相同,正数的原码、反码、补码完全一致。

下面给出问题的分析步骤:
根据上面的结论,123在内存中的存储方式是这样的:
(二进制位)15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
(整数123) 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1
(你要的结果)0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1
形式上= 123+2^2=123+4=127。
因此,如果不用位运算,用123+4(4的二进制的表达最后三位是100,其余全为0)就得到了你要的结果。但是很多情况下我们可以省去自己计算的麻烦,直接用位运算解决。

上面的式子的效果与 123 与( xxxx xxxx xxxx x1xx)做按位或运算是一样的。
x为0或1都不影响结果,只要确保第三位为1.

所以,你想让原有的数某一位或某几位变为1,只要将这个数与对应位为1的数做Or运算即可。

因此上面的式子等效于 123 Or 4(100) 或者 123 Or 7 (111) 或者 123 Or 127(111 1111),等等。

如果你不理解位运算,那你需要查阅相关资料。

我只能帮你到这了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-05
“按位与”常用来对某些位清0或保留某些位。即 AND 运算

要保留的位在另一个数中对应位取1,要清0的位在另一个数中对应位取0。
如把a 的高8位清0,保留低8位,可作a AND 255运算(255的二进制为0000000011111111)。

按位或:常用来对某些位设置为1。即 OR 运算
要将哪些位设置为1,就与那些位为1的一个数做“按位或”运算,其他位不会被修改。
第2个回答  2013-01-05
a = 123
b = a Or 4
结果是127
因为二进制 100 = 十进制 4
第3个回答  2013-01-05
在第几位上就运算第几位呗,+ or - 2^n n是你的位数-1 现在这个情况就是 + 2^(3-1)
相似回答