c - 为什么这个按位运算符返回负数?

标签 c bitwise-operators

我刚刚阅读了有关按位运算符的教程,但我不明白为什么这个数字是 -61。

unsigned int a = 60;    /* 60 = 0011 1100 */  
unsigned int b = 13;    /* 13 = 0000 1101 */
int c = 0; 
c = ~a;          /*-61 = 1100 0011 */
printf("Line 4 - Value of c is %d\n", c );

11000011不应该是195吗? (128+64+2+1)

http://www.tutorialspoint.com/cprogramming/c_bitwise_operators.htm

最佳答案

不,不应该这样!

您可能希望对所有参数使用unsigned char

unsigned char a = 60;
unsigned char b = ~a;
char c = ~a;
printf("b=%d\nc=%d\n", b, c);

给出输出:

b=195
c=-61

关于c - 为什么这个按位运算符返回负数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25480752/

相关文章:

c++ - const char* 连接

c - 如何让 getchar() 不能得到我之前做的 ENTER?(在 C 中)

sql - 如何获得组的一列的所有值的或乘积

java - 仔细检查包容性 OR 语句

c# - 是否有内置函数来反转位顺序

c - 我的 C 中的 for 循环出现奇怪的错误

c - 赋值操作真的会返回一些东西吗?

c++ - 按位与 : why do I get this behaviour?

Java : Operators and Typecasting

c++ - 堆栈内存可以在函数内自动分配吗?