康定网站建设工作室,德阳网站优化,开源nodejs wordpress,北京万网网站备案(数据是怎么在计算机中存储的) 正数和负数在内存中都是以补码的形式存储的#xff0c;但不同的是正数的原码#xff0c;补码#xff0c;反码都是相同的#xff0c;而负数的原码#xff0c;补码和反码是不同的。 负数的原码#xff0c;补码#xff0c;反码之间存在什么…(数据是怎么在计算机中存储的) 正数和负数在内存中都是以补码的形式存储的但不同的是正数的原码补码反码都是相同的而负数的原码补码和反码是不同的。 负数的原码补码反码之间存在什么关系 补码等于原码按位取反但最高位即符号位不变 反码等于原码加一 原码等于反码按位取反加一也等于反码减一得到补码再按位取反
注意符号位0表示正数1表示负数
例如 由此我们可以去理解位操作符^在计算机中是怎么运算的
如下代码
#includestdio.h
int main() {int a 10;int b -12;int c a ^ b;printf(a%d b%d\n, a, b);printf(a^b%d\n, c);return 0;
}结果展示 ^操作符成为按位异或操作符计算方式是以补码按位比较当相同时结果为0不同时结果为1 关键点在于数据在进行操作时在计算机内都是以补码的形式进行操作而输出时是以原码的形式输出而在对正数进行操作时因为正数的原码补码反码都相同所以你可能会没考虑到它也是以补码的形式被操作的 注意在参与异或运算时符号位也参与而在负数求补码时符号位不参与即不变 例二-12^-10
#includestdio.h
int main() {int a -10;int b -12;int c a ^ b;printf(a%d b%d\n, a, b);printf(a^b%d\n, c);return 0;
}结果展示: 参与异或运算的数满足交换律即a ^ b ^ca ^ c ^ b