首页 > 编程知识 正文

c语言代码中按位与,按位与计算器在线

时间:2023-05-05 17:30:30 阅读:151527 作者:1852

首先,做百度的说明

是二进制的“与”运算,以位为单位运算参与运算的两个个数的二进制数。 运算法则如下。

0=0

0=0

1=0

1=1

参加运算的数量换算成二进制进行运算。 例如,7 2的结果是2。 步骤如下。

7 2

=0111 0010

=0010

=2

也就是说,在比特数和运算中,只有在两个变量都为1时,结果才为1,11==1,10==01==00==0

然后,具体说一下自己在相遇时的应用。 在值得获取文件MD5的时候,使用位运算处理数据,在使用BigInteger获取digest.update的byte[]的时候,在顶部为0的时候删除。

之后,变换16进制数之间的变换后,解决这个问题。 途中遇到了代码使用的代码。

digest.update(buffer,0,len ); 方法

代码片段

stringbuilder result=new stringbuilder (;

byte[] b=digest.digest (;

for(intI=0; i b.length; I ) {

result.append(integer.tostring () b[I]0xff )0x 100,16 ).substring(1) )1);

}

return result.toString (;

integer.tostring () b[I]0xff )0x 100,16 ).substring(1) 1;

说明: b[i]为byte,0x用十六进制表示。

0xff的十进制数为15 * 1615=255,0x 100的十进制数为1*16*16=256

integer.tostring(num,16 ); 以16进制、substring(1)、开始位1、结束为最后切出字符串。

也就是说,在变换为二进制后,变换为十六进制,进行剪切。

byte[i]0xff的and运算,即十六进制计算

我认为0xff的目的是把原来的负数变成正数

如果与byte[i]0xff进行运算,计算16进制数得到的byte[i]为负数,

计算机存储数据的结构:存储在正数中的二进制源代码。 负数中存储的是二进制补码。

其中,补数是负数绝对值的反码加1。 绝对值,反转,加1。

在byte -- int是byte字节即8比特二进制、int的4字节即32比特二进制的情况下,byte -- int从8比特向32比特,上位24比特全部补充1

这样,前24名全部是1。 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

0xFF的二进制表示形式为1111 1111。 转换为int计算时,前24位为0:000000000000001111

的运算规则只有11=1

1111111111111111111111111111111111111111111111111 * * * *

0000 0000 0000 0000 0000 0000 1111 1111

=

0000000000000000000000 # # #

这样,在byte[i] 0Xff之后,可以将前24位设为0,称为正数。

所以需要0xFF使byte的原始负值为正

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。