c语言的原码补码反码-位运算
计算机内存负数的时候是存的补码容易运算
有无unsigned 的区别
数据在计算机上存储是2进制的 第一位是符号位 其余是数据位
unsigned 是无符号的意思 没有符号位 全都是数据位
比如
unsigned int int 占4字节8位在内存中
0000 0000 0000 0000 0000 0000 0000 0000
int 也占4字节8位 这时候第一位为符号位
1 000 0000 0000 0000 0000 0000 0000 0000
综上所属
int 类型最大值为2^31(^是多少次方不是异或)2147483648
unsigned int 类型最大值为2^32 4294967296
short 类型2字节16位
unsigned
0000 0000 0000 0000 2^16 65536
short
1 000 0000 0000 0000 32768
等等….
废话不多说上例子
#include<stdio.h>
#include<stdlib.h>
int main()
{
//右移 >>
//正
char ch1 = 2;
//2用2进制表示 char 类型是1字节8位
// 0000 0010 :2
//向右移动1位 0000 0001 :1
printf("%d",ch1>>1);//向右移动 结果1
//负数
char ch2 = -2;
//1000 0010 -2的原码
//1111 1101 -2的反码 反码就是在原码的基础上符号位不变其余位置0变1 1变0;
//1111 1110 -2的补码 补码就是在反码的基础上加1
//我们这时候对-2进行移动 1111 1111