2017-10-11 75 views
1

您好我已经编写了一个程序来切换char数组中的位。我发现当我切换第7位时,我得到错误的答案。请帮帮我。C中的位切换混乱

int main() { 
    int n,c; 
    char dummy; 
    scanf("%i", &n); 
    char a[13]; 
    memset(a,0x00,13); 
    for(int a_i = 0; a_i < n; a_i++){ 
     scanf("%d",&c); 
     dummy = c%8; 
     a[c/8] ^= (1<<dummy); 
    } 
    printf("\n"); 
    for (int _i=0;_i<13;_i++)printf("%x ",a[_i]); 
// int result = lonelyinteger(n, a); 
// printf("%d\n", result); 
    return 0; 
} 

Input: 
9 
4 9 95 93 57 4 57 93 9 

Output: 
0 0 0 0 0 0 0 0 0 0 0 **ffffff80** 0 

我需要输出为80而不是ffffff80。请帮我解决一下这个。

+3

'的printf( “%X”,一个[_i]);' - >'的printf( “%X”,(无符号字符)一个[_i]);' – BLUEPIXY

+0

它被符号扩展的字节到一个32位的数字,因此(无符号整数)(a [-i])可能/应该解决这个问题。或者dummy = a [_i];然后printf虚拟变量 –

+2

@old_timer投射到'unsigned int'无法按预期工作。 – BLUEPIXY

回答

-1

请记住,它不仅是数组类型的有符号性,而且还是整数字面值的符号,您正在转移这一点。确保两者都是无符号的。

x ^= 1U << n; 
+1

这是很好的一般性建议;然而'伪'在OP代码中永远不会超过'7',并且'x^=(1 << 7)'和'x^=(1u << 7)'之间没有区别。问题更多的是与声明的'x'类型有关 –