-
左移<<:
高位丢弃,低位补零
实现2倍乘运算: 左移n位就是将数值*2的n次方
注意:如果数据类型为有符号型,由于高位丢弃,发生溢出
查看全部 -
异或:两者相斥才为1
符号:^
应用:
按位反转:a^0xFF
实现数值交换:a=a^b;b=b^a,a=a^b
查看全部 -
16进制数0xFF=1111 1111=255
查看全部 -
按位与判断奇偶性:
a为偶数:a&1 == 0
a为奇数:a&1 != 0
查看全部 -
位 0 false 1 true
&按位与,整型或字符型,补码
a=4;00000000000000000000000000000100
b=7;00000000000000000000000000000111
a&b=00000000000000000000000000000100=4
迅速清零a&0=0
查看全部 -
malloc分配内存块的函数
sizeof判断数据类型的长度符
查看全部 -
共用体:
1、不同数据类型的变量共享一个内存地址
2、该结构体所占实际内存为最大的成员所占
3、关键字union
union data{
..
..
}
union data data_1
查看全部 -
如何对结构体进行初始化和访问结构体成员:
1、初始化 在花括号内 对结构体内变量成员依次赋值即可
struct weapon weapon_1 = {"w_name",100,200};
2、访问结构体成员:使用运算符.
:weapon_1.name,weapon_1.price//根据初始化的内容,=200
结构体数组:struct weapon weapon_2[2];
初始化就依次就好了:
查看全部 -
结构体:
写在 main()函数之前
结构体是不同类型变量的集合(与数组很不同)
例子:
写一个武器的结构体类型
首先使用关键字struct
struct weapon{
char name[20];
int atk;
int price;
};
在int main(){中使用这个数据类型
struct weapon 变量名;
如果要使用结构体数据类型作为全局变量,可在写struct的时候在}后写变量名然后;。
比如:
struct weapon{
char name[20];
int atk;
int price;
}weapon1;
查看全部 -
typedef 与#define作用域不同:
#define如果写到了自定义函数里面,在这函数外面还是可以使用的
但typedef就不行了。
查看全部 -
定义 结构体
struct stu{
}
在使用这个结构体的时候麻烦
:struct stu xxx;
所以常常这样写
typedef struct stu{
}stu_t;
之后通过 stu_t xxx;创建结构体
查看全部 -
与宏相近的语法:typedef(type define)
作用:给变量类型起别名,当你感觉某变量名别扭,甚至数据类型名别扭时。。经常用在给自定义的数据类型起名字
比如数据类型size_t实际是系统用typedef语法处理了
typedef unsigned long size_t
注意:宏#define 眼里是没有C语法的,所以不以分号结尾。
但typedef是C 需要以;结尾
注意:typedef int *p意义是:int *=p,所以p q=指针q
区别:在经过预处理后 typedef起的别名是不会替换回去的
查看全部 -
预处理过程其实还有一个条件编译的功能:可以根据不同的条件,编译不同的程序部分从而产生不同的目标代码文件,对程序的移植和调试很有用
查看全部 -
注意:
1、宏定义是完全字符串替换 所以这里 a+b加个()。防止一些意想不到的错误。
2、但也有好处 :都是实现求和,定义函数求和对变量的数据类型只能与写函数的时候保持一致,而宏定义实现求和没有这个.
查看全部 -
宏也有函数形式,可以有参数,参数可以是代码里面定义的变量 :
#include<stdio.h>
#define R 20
#define N(n) n*10
int main(){
int a=R;
int b=N(a)//打印b 会发现b=20*10=200
查看全部
举报