首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

自学位逻辑运算出有关问题了

2013-01-08 
自学位逻辑运算出问题了位逻辑反的运算#include stdio.hmain(){int b34//赋值,b二进制:00100010printf

自学位逻辑运算出问题了
位逻辑反的运算

#include <stdio.h>
main()
{
int b=34;//赋值,b二进制:00100010
printf("%d\n",~b);//输出
}

按道理b是00100010,那取反变成了11011101,也就是221.为什么执行以后变成了-35?
麻烦讲详细一点
[解决办法]
按道理b是00100010,那取反变成了11011101,也就是221.为什么执行以后变成了-35?
取反后最高位变成了1,按有符号整数解释,就是负数了.
printf("%d", ~b);
是按整数格式打印,又因为b取反后的二进制就是表示的-35,所以打印-35.

如果还不清楚,就要看看补码,反码啊,计算机数的存储方式的知识了.
[解决办法]
int b=34;//赋值,b二进制:00100010

b 是int类型,是32位的,不是8位,所以b的二进制是
0000 0000 0000 0000 0000 0000 0010 0010

取反后是
1111 1111 1111 1111 1111 1111 1101 1101
其数值是上面的二进制补码取反加1 乘负1,则为(34 + 1) * -1 = -35
[解决办法]
先去看看补码以及整数的补码表示相关的知识。

热点排行