原码、反码、补码相关知识:
二进制的正负值表示:二进制最左边为符号位,0表示正数,1表示负数
整数的二进制表示有:
正整数的原码、反码、补码都相同;
原码(二进制表示):补码的补码为原码
反码(原码符号位不变,原码其他位按位取反)、
补码(反码加1得到补码)
计算机存储到内存的是补码
// -1的原码为:10000000000000000000000000000001
// -1的反码为:1111111111111111111111111111111111110
// -1的补码为:1111111111111111111111111111111111111
//int main()
//{
// int a = -1;
// -1在内存中存储的是补码:1111111111111111111111111111111111111
// int b = a >> 1;
// a>>1:表示a的补码:1111111111111111111111111111111111111 算术右移1位
// printf("b = %d\n", b); // b = -1(%d打印的是原码 )
// return 0;
//}
相关代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
// -1的原码为:10000000000000000000000000000001
// -1的反码为:11111111111111111111111111111110
// -1的补码为:11111111111111111111111111111111
//
int main()
{
int a = -1; // -1在内存中存储的是补码:11111111111111111111111111111111
int b = a >> 1; // a>>1:表示a的补码:11111111111111111111111111111111 算术右移1位
printf("b = %d\n", b); // b = -1
return 0;
}
执行结果如下: