vb中怎样对一个变量进行取反

vb中怎样对一个变量进行取反,第1张

vb中的变量取反是:not+变量

not,and,or,Xor 用做boolean值时,它们就作为逻辑运算符

not,and,or,Xor 用整数值时,它们就作为位运算符

例子:dim a as integer =not 143 ' a=-144 按位取反!~~~~~

int型是32位整型数据类型,int型的8在内存里占32bit,存储为

00000000 00000000 00000000 00001000

,按位取反操作后,就变成了你输出的那样。而且这个二进制默认是有符号型的整数,其最高位的1是代表负号,我们知道二进制负数表示为数值位取反再加1(也就是补码),依照这个,对你输出的数减1,取反(第一个1是符号位,不变),得到其原码:

10000000 00000000 00000000 00001001,

也就是负9。

负数是按其对应正数的补码存储的

补码=反码+1,也就是取反再加1

-4 的计算:

1、对应正数(4)的二进制:0000 0100

2、反码(取反):1111 1011

3、加1:1111 1100

所以-4的二进制码就是 1111 1100

在2进制中,负数是以它正值的补码形式表达

原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。

比如

0000

0000

0000

0000

0000

0000

0000

0101是

5的

原码。

反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。

取反操作指:原为1,得0;原为0,得1。(1变0;

0变1)

比如:将5的二进制表达式的每一位取反,得

1111

1111

1111

1111

1111

1111

1111

1010

称:1111

1111

1111

1111

1111

1111

1111

1010

0000

0000

0000

0000

0000

0000

0000

0101

的反码。

反码是相互的,所以也可称:

1111

1111

1111

1111

1111

1111

1111

1010

0000

0000

0000

0000

0000

0000

0000

0101

互为反码。

补码:反码加1称为补码。

也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。

那么,5的补码为:

1111

1111

1111

1111

1111

1111

1111

1010

+

1

=

1111

1111

1111

1111

1111

1111

1111

1011

所以,-5

在计算机中的二进制表达为:

1111

1111

1111

1111

1111

1111

1111

1011

转换为十六进制:0xFFFFFFFB。

====================================

明白了上面的就可以理解怎么求

~i

int型储存32个二进制位,~这个符号是按位取反,就是求i的反码。

即得到1111

1111

1111

1111

1111

1111

1111

1010

上面这串二进制代表一个负数,将它转换成int型过程如下:

1111

1111

1111

1111

1111

1111

1111

1010-1

=

1111

1111

1111

1111

1111

1111

1111

1001

再求反:

0000

0000

0000

0000

0000

0000

0000

0110

这个值就是5的按位取反所得到的int整数的绝对值(注意:5按位取反得到的是负数)

所以转换为int型为:6

即:int型的i=5

取反后的结果为-6

C语言中取反符号是~。

C语言运算符:

1算术运算符:-+/%

2关系运算符:><==!=>=<=

3逻辑运算符:!&&||

4位运算符:<<>>~|^&

5赋值运算符:=及扩展赋值运算符

6条件运算符::

7逗号运算符:,

8指针运算符:和&

9求字节数运算符:sizeof

10强制类型转换运算符:(类型)

扩展资料

C语言中取反符号的使用

a=23,c=~a,printf("%d",c);

#include<stdioh>

intmain()

{

inta=23;

intc=~a;

printf("%d",c);

return0;

}

首先你输出是肯定用的

printf("%d",~a)

int类型数据是有范围的

-32768~32767

[100]原=0000

0000

0110

0100

取反后为1111

1111

1001

1011

这个数值已远远超出了范围,发生溢出

但是这个数值是-101的补码,而计算机数字都是按补码存储的,所以他输出了-101

你放成ld,数值又不同

有天群里有人问怎么给十六进制取反,就是0x61E90000取反后得到0x9E16FFFF

有的就讨论了,先转为二进制然后按位取反,完成后再转十六进制

我想了下,不管多少进制,都是数字,观察后发现两个数组相加和为0xFFFFFFFF那就是可以用0xFFFFFFFF- 原值就是新的值公式如下:

定义原十六进制数为int1,新十六进制数为int2 ,那么

int2即为得到的新值

接着讨论下把十六进制转为二进制再取反的情况

0x61E90000转为二进制是0110 0001 1110 1001 0000 0000 0000 0000

0x9e16FFFF转为二进制是 1001 1110 0001 0110 1111 1111 1111 1111

可见确实是按位取反得到的,那么如何对十六进制按位取反操作呢,使用波浪线~来,如下

我们知道,计算机是不能把数字以二进制格式打印的,只能打印八进制,十进制,十六进制,因为数字在计算机中都是二进制存着的,对十六进制按位取反也就是对二进制数字按位取反

以上就是关于vb中怎样对一个变量进行取反全部的内容,包括:vb中怎样对一个变量进行取反、int类型取反、二进制取反等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:聚客百科

原文地址: http://juke.outofmemory.cn/life/3654224.html

()
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-24
下一篇 2023-04-24

发表评论

登录后才能评论

评论列表(0条)

保存