c语言中数字以二进制数字补码的形式存放在内存单元中
显示的其实是改数字的原码
其中原码反码补码的首位数字代表的数字的正负(正数的原码反码补码的第一位数字是0,而负数的原码反码补码第一位数字是1)
正数的原码反码补码相同(就是二进制表示出正数即可)
负数的原码反码补码不同
负数的原码转到补码(原码除了第一位的符号位不变,其他位数字按位取反得到反码,在反码的基础上+1得到补码)
同理:负数的补码转到原码(应该在补码的基础上-1,再按位取反(符号位不变))
例:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = 5;
int b = -3;
int c = a & b;
printf("c=%d",c); //c=5
return 0;
}
//int a=5(由于int型的变量占据4个字节,32个bit)
//原码 00000000000000000000000000000101
//反码 00000000000000000000000000000101
//补码 00000000000000000000000000000101
//int b=-3(由于int型的变量占据4个字节,32个bit)(负数的原码反码补码的第一位是符号位,在相互转化的过程总符号位不变)
//原码 10000000000000000000000000000011
//反码 11111111111111111111111111111100
//补码 11111111111111111111111111111101
//int c=a&b
//a的补码 00000000000000000000000000000101
//b的补码 11111111111111111111111111111101
//
//c的补码 00000000000000000000000000000101 (由于从c的补码可以看出c是正数,所以c的原码反码补码均一致)
//c的反码 00000000000000000000000000000101
//c的原码 00000000000000000000000000000101 (打印的时候最后都是以原码的形式显示,所以要求出c的原码)
//打印以是以十进制打印的所以要求出c的原码对应的十进制表示形式