算术、’ 移位、 位操作符

//算术操作符 + - * / %
1. 除了%操作符之外,其他的几个操作符可以作用于整数和浮点数。
2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
3. %操作符的两个操作数必须为整数。返回的是整除之后的余数。
原码  1:00000000 00000000 00000000 00000001    -1:10000000 00000000 00000000 00000001
反码  1:00000000 00000000 00000000 00000001    -1:11111111 11111111 11111111 11111110
补码  1:00000000 00000000 00000000 00000001    -1:11111111 11111111 11111111 11111111
整数的原码反码补码不变,负数的反码除负号(1)外,其余各个位取反(0—>1,1->0),负数的补码在其反码的基础上加1,
内存中二进制序列存的是补码
//移位操作符 整型 只能移正数位,不能移负数位 << 左移操作符    >>右移操作符
int main()
{
// 原码 反码 补码 10: 00000000 00000000 00000000 00001010
// 左移一位  补码 20: 00000000 00000000 00000000 00010100
int a = 10;
int b = 0;
b = a << 1;//左移 左边丢弃 右边补0 
  printf("%d\n",a);//10 a自身的值不会变
printf("%d\n",b);//20
system("pause");
return 0;
}
int main()
{
// 原码 反码 补码          10: 00000000 00000000 00000000 00001010
// 右移一位  补码 逻辑移位 20: 00000000 00000000 00000000 00000101 逻辑移位 右边丢弃 左边补0
// 右移一位  补码 算术移位 20: 00000000 00000000 00000000 00000101 算术移位 右边丢弃 左边补原值的符号位
// 原码 反码 补码          -1: 11111111 11111111 11111111 11111111
// 右移一位  补码 逻辑移位   : 01111111 11111111 11111111 11111111 
// 右移一位  补码 算术移位   : 11111111 11111111 11111111 11111111  -1的符号位位1,左边补1,右边补0
int a = 10;
int m = -1;
int n = 0;
int b = 0;
b = a>>1;// 逻辑移位: 右边丢弃 左边补0    
n = m >> 1; //算术移位:右边丢弃,左边补原值的符号位(正值补0,负值补1)
printf("%d\n", a);//10 a自身的值不变
printf("%d\n", b);//5
printf("%d\n", m);//-1 m自身的值不变 
printf("%d\n", n);//-1 计算机按算术移位
system("pause");
return 0;
}
//位操作符 &按位与 |按位或  ^按位异或 他们的操作数必须是整数 (用二进制序列的补码)
int main()
{
// -2的补码    11111111 11111111 11111111 11111110
// -3的补码    11111111 11111111 11111111 11111101
//-2&-3的补码  11111111 11111111 11111111 11111100 
//-2&-3的原码  10000000 00000000 00000000 00000100  是-4 
//-2|-3的补码  11111111 11111111 11111111 11111111
//-2|-2的原码  10000000 00000000 00000000 00000001  是-1
//-2^-3的补码  00000000 00000000 00000000 00000011
//-2^-3的原码  00000000 00000000 00000000 00000011  是3
// 位全是1 &后是1 否则为0
// 只要其中至少一位是1 |后是1,两个位全是0,|后是0
// ^ 位相同为0,不同为1
int a = -2;
int b = -3;
//a^a=0
//不创建临时变量,实现两个变量的交换
a = a^b;
b = a^b;//a连续异或两次同一个变量,结果为a
a = a^b;
printf("a=%d b=%d\n", a, b);
printf("%d\n", a&b);//-4
printf("%d\n", a | b);// -1
printf("%d\n", a^b);// 3


system("pause");
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值