在VB中怎么改变一个2进制数其中的任意一位的状态?
我现在要控制I/O的输出,读出来是十进制的整数,比如说123,把123转换成2进制之后是1111011,这是输出的状态,我现在要把第三位的0改成1,其他位不变,然后输出,...
我现在要控制I/O的输出,读出来是十进制的整数,比如说123 ,把123转换成2进制之后是1111011,这是输出的状态,我现在要把第三位的0改成1,其他位不变,然后输出,请问大家我应该怎么计算才能得出这个十进制的数据,然后传给输出寄存器?
展开
4个回答
展开全部
这个要熟悉位运算。
"位运算就是对字节或字节内的二进制位数进行测试、抽取、设置或移位等操作。因此位运算不能是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),等等。
如果你不理解位运算,那你需要查阅相关资料。
我只能帮你到这了。
"位运算就是对字节或字节内的二进制位数进行测试、抽取、设置或移位等操作。因此位运算不能是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),等等。
如果你不理解位运算,那你需要查阅相关资料。
我只能帮你到这了。
展开全部
“按位与”常用来对某些位清0或保留某些位。即 AND 运算
要保留的位在另一个数中对应位取1,要清0的位在另一个数中对应位取0。
如把a 的高8位清0,保留低8位,可作a AND 255运算(255的二进制为0000000011111111)。
按位或:常用来对某些位设置为1。即 OR 运算
要将哪些位设置为1,就与那些位为1的一个数做“按位或”运算,其他位不会被修改。
要保留的位在另一个数中对应位取1,要清0的位在另一个数中对应位取0。
如把a 的高8位清0,保留低8位,可作a AND 255运算(255的二进制为0000000011111111)。
按位或:常用来对某些位设置为1。即 OR 运算
要将哪些位设置为1,就与那些位为1的一个数做“按位或”运算,其他位不会被修改。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
a = 123
b = a Or 4
结果是127
因为二进制 100 = 十进制 4
b = a Or 4
结果是127
因为二进制 100 = 十进制 4
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在第几位上就运算第几位呗,+ or - 2^n n是你的位数-1 现在这个情况就是 + 2^(3-1)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询