5.27
操作符
单目操作符
补充知识:原码、反码、补码
原码:
一个数X的原码表示为:符号位用0表示正,用1表示负;数值部分为X的绝对值的二进制形式。这里将X的原码表示记为[X]原。
例如,当X=+1100001时,则[X]原=01100001。
当X=-1110101时,则[X]原=11110101。
在原码中,0有两种表示方式,分别如下。
当X=+0000000时,[X]原=00000000。
当X=-0000000时,[X]原=10000000。
反码:
一个数X的反码表示方法为:若X为正数,则其反码与原码相同;若X为负数,则在原码的基础上,符号位保持不变,数值位各位取反。这里将X的反码表示记为[X]反。
例如,当X=+1100001时,则[X]原=01100001,[X]反=01100001。
当X=-1100001时,则[X]原=11100001,[X]反=10011110。
在反码表示中,0也有两种表示形式,具体如下:
当X=+0时,则[X]反=00000000。
当X=-0时,则[X]反=10000000。
补码:
一个数X的补码表示方式为:当X为正数时,则X的补码与X的原码相同;当X为负数时,则X的补码,其符号位与原码相同,其数值位取反加1。这里将X的补码表示记为[X]补。
例如,当X=+1110001,则[X]原=01110001,[X]补=01110001。
当X=-1110001,则[X]原=11110001,[X]补=10001111。
三者的关系:原码符号位不变,其它位按位取反得到反码,反码加一得到补码。相反的关系推过去即可。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 0;//int储存4个字节00000000000000000000000000000000
int b = ~a;//b是有符号的整型。~按二进制位取反得到11111111111111111111111111111111,符号位为-1计算机系统会将其识别为某一负数的补码,若要输出这个负数,我们就要进行补码回推原码的工作
printf("%d\n", b);//回推原码得到10000000000000000000000000000001即这个负数为-1
return 0;
}
所以这个关系你理解了吗?我是理解了很久。
~a=[b]补
int main()
{
int a = 10;
int b = a++;//后置++:先把a的值赋给b,a自己再增加1,若此处改为前置++则先把a+1变为11,b也变为11。
printf("a=%d b=%d\n", a, b);//a=11 b=10
return 0;
}
int c =(int)3.14//强制转化符
关系操作符
逻辑操作符
条件操作符(三目操作符)
int main()
{
int a = 10;
int b = 20;
int max = 0;
max = (a > b?a:b);
printf("%d\n", max);
return 0;
}
逗号表达式
exp1,exp2,exp3, …expN
下标引用、函数调用和结构成员操作符
[] () . ->
常见关键字(不能与变量名冲突)
补充点:计算机存储数据体系
一开始CPU与内存直接联系取用内存,直到后来内存速度发展跟不上CPU,于是就采用了减少大小换取速度的方式,CPU与寄存器取用,寄存器往高速缓存取,高速缓存再往内存取的方式以提升电脑速度。
typedef:类型定义(重命名)
typedef unsigned int unit_32;
int main()
{
unsigned int unm1 = 0;
unit_32 num2 = 0;//这两个变量的类型是一样的
return 0;
}
static
void test()
{
int a = 1;
a++;
printf("a=%d\n", a);
}
int main()
{
int i = 0;
while (i < 5)
{
test();
i++;
}
return 0;
}
void test()
{
static int a = 1;
a++;
printf("a=%d\n", a);
}
int main()
{
int i = 0;
while (i < 5)
{
test();
i++;
}
return 0;
}
static修饰局部变量生命周期变长,破坏掉另一个在同一工程却不在同一页面全局变量的生命周期,让其只能在自己所在源文件使用(extern也没用)。
#define
定义常量和宏
#define max = 100;
就可以将max定义为常量
#define max(X,Y) (X>Y?X:Y)
指针
补充:内存:以一个字节为单位而不是一个比特位。
int main()
{
int a = 10;
int* p = &a;//指针变量:存放地址
printf("%p\n", &a);
printf("%p\n", p);
//*p即解引用操作符
return 0;
}