@
目录一. 算数操作符
1. 算数操作符分类:
+ | - | * | / | % |
---|
- 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。
- 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
- % 操作符的两个操作数必须为整数。返回的是整除之后的余数。
二. 移位操作符
1. 移位符分类. 注:移位操作符的操作数只能是整数, 以下对于数据以二进制码形式展示不全, 只展示了16位正确的是需要写成4个字节32位才对。
>> | << |
---|
一. 左移运算符
注意: 对于负数的左移需要在补码的基础上进行, 任何对负数的操作都是基于补码形式, 因为机器中负数就是以补码形式纯在
- 左移操作符规则: 左边抛弃, 右边补0;
- 负数左移过程详解: 1000000000000101(源码) -> 1111111111111010(反码) -> 1111111111111011(补码) -> 1111111111101100(补码左移两位) -> 1111111111101011(左移两位的反码) -> 1000000000010100(左移两位的源码) = -20
#include <stdio.h>
int main()
{
int a = 5; // 0000000000000101
int b = -5; // 1000000000000101
int x = a << 2; // 20
int y = a << 2; // -20
printf("%d \n", x);
printf("%d \n", y);
return 0;
}
/*
证明负数在左移的时候, 左值是直接丢弃的. 11000000000000000000000000000000(源码) ->
10111111111111111111111111111111(反码) -> 11000000000000000000000000000000(补码) ->
00000000000000000000000000000000(左移两位,, 注意之里左移两位后变成了0, 所以这里的补码也就
是源码所以结果输出为0)
*/
#include <stdio.h>
int main()
{
int a = -1073741823; // 11000000000000000000000000000000
int x = a << 2; // 0
printf("%d \n", x);
return 0;
}
二. 右移运算符
注意: 右移运算符分为两种, 算数位移和逻辑位移. 以如下两段代码分别作为示例.
- 算数位移: 左边用原来的符号位填充, 右边丢弃.
- 逻辑位移: 左边用0填充, 右边丢弃
//算数位移
#include <stdio.h>
int main() {
int x = -5;
int y = x >> 2; // -2
printf("%d\n", y);
return 0;
}
//逻辑位移
#include <stdio.h>
int main() {
unsigned int x = -5;
unsigned int y = x >> 2; //1073741822
printf("%u\n", y);
return 0;
}
三. 位操作符
1. 位操作符分类:
& | | | ^ |
---|
//面试题案例: 不能创建临时变量(第三个变量),实现两个数的交换。
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
//function One;
a = a + b;
b = a - b;
a = a - b;
//function Two;
a = a^b;
b = a^b;
a = a^b;
printf("a = %d b = %d\n", a, b);
return 0;
}
四. 赋值操作符
1. 基本赋值符
= 是基本的赋值操作符
2. 复合赋值符
+= | -= | *= | /= | %= | >>= | <<= | &= | |= | ^= |
---|
五. 单目操作符
1. 单目操作符分类
! | - | + | & | sizeof | ~ | -- | ++ | * | (类型) |
---|---|---|---|---|---|---|---|---|---|
逻辑反 | 负值 | 正值 | 取地址 | 操作数的类型长度 | 按位取反 | 前后置-- | 前后置++ | 解引用 | 强制类型转换 |
sizeof详解:
- sizeof计算表达式大小的时候在编译期间, 所以sizeof()中的表达式不参与运算.
#include <stdio.h>
int main()
{
short s = 5;
int a = 10;
printf("%d \n", sizeof(s = a + 2)); // 2
printf("%d \n", s); // 5
}
标签:09,int,左移,补码,include,详解,操作符,main
From: https://www.cnblogs.com/Deng-S/p/17502593.html