为什么在C ++中没有像“====”那样的比特式比较器?我每次都要编译变量吗?
(注意:我已经知道逻辑算术运算符,看起来不一样。顺便说一下,没有算术-xor a ^^ b也:) 我知道我可以检查一个& b对a(或b),a ^ b对零,...... )
#include "stdafx.h"
#include<iostream>
#include<stdlib.h>
int main()
{
char a=-1;
unsigned char b=0;
for(b=0;b<255;b++)
{
if(a==b)std::cout<<(int)b; //cannot find 11111111)2==11111111)2
//ok, it looks -1==255 surely
//if(a====b)std::cout<<" bitwise equal "; could be good
}
bool compare=true;
bool bit1=false,bit2=false;
unsigned char one=1;
b=255; //bit-swise equal to a
for(int i=1;i<7;i++)
{
bit1=(a>>i)&one;
bit2=(b>>i)&one;
if(bit1!=bit2){compare=false;return;}//checks if any bit is different
}
if(compare)std::cout<<(int)b; //this writes 255 on screen
getchar();
return 0;
}
感谢。
我本可以做到:
__asm
{
push push....
mov al,[a]
mov dl,[b]
cmp al,dl //this is single instr but needs others
je yes
mov [compare],false
jmp finish
yes:
mov [compare],true
jmp finish
finish:
pop pop...
膨胀的代码......
答案 0 :(得分:2)
您可以执行以下操作:
a ^ b == 0
答案 1 :(得分:2)
这样的运算符不起作用,因为它取决于平台。
我假设当x和y具有不同的长度时,'x === y'应返回false,并且因为int在不同平台上具有不同的长度,所以此操作的结果也是如此。
答案 2 :(得分:2)
你真的需要将签名与未签名比较吗?
您应该重新设计算法,使==
的两个操作数具有相同的符号。
答案 3 :(得分:2)
您无法在char
或unsigned char
上进行任何比较。积分
促销意味着您可以比较的最小整数类型
int
; char
和unsigned char
都将提升为int
在比较之前。 (之后,在大多数现代机器上,那里
在按位比较和值比较之间没有区别。)
我很想说你不应该想要逐位比较。在很多
方式,隐含的转换(包括促销)会导致更多
问题比什么都重要,从逻辑上讲,你应该
显式,并指定要比较的内容。 (和测试
如果类型为unsigned char
,则保证平等“大”。
这就是为memcmp
定义unsigned char
的原因
比较。)