//算术操作符 + - * / %
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;
}
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;
}