cstudy 6.5

6.5
1.算术运算符续:
! 非 优先级高

= 赋值运算符 也有值,其值为所附值

, 逗号运算符 优先级比=还低
其值为最后一项的值

int a=10;
int b,c,d;
int r=b,c=1,d,a;//r=10

2.指针续:
数组指针
数组名表示数组首层元素的地址,如此数组中p可以代替a
但使用&a时表示取数组a的地址,偏移量为数组大小

int a[2][3]={1,2,3,4,5,6};
int (*p)[3]=a;//a==&a[0]
//*(*(p+i)+j)==p[i][j]==*(p[i]+j) 都表示a[i][j]
int b[3]={1,2,3};
int (*p)[3]=&b;//&a表示地址为&a[0]但偏移量为12
int (*p)[2][3]=&a;//二维数组指针
//&a[0][0]+1*4+2 == &a[0][0]+4+2   即式中*号表示乘法

3.字符指针

char *p="hello world!";
//p[1]='q';错误的 常量储存在数据段 不可改
//p等于首字符地址


4.++ --与*
都是从右至左结合
++前置优先级比后置高
就算是(a++)周围表达式用了再自加


5.位运算符
~  取反

unsigned cahr a=0x22;//0010 0010
unsigned char b=~a;//1101 1101

& 位逻辑与

short a=417;//1111 1111 1010 0001
char b=3;// 0000 0011
short c=a&b;//0000 0000 0000 0001 不够的自动补0

| 位逻辑或

^位逻辑异或

<< 左移
移出去的不管,空出来的补0

char a=5;//0000 0101
char b=a<<3;//0010 1000

>> 右移
正数或无符号与左移相同(逻辑移位)
若为负数,补1(算术移位)由编译器决定,此可能产生移植性问题

与或优先级高于移位

应用:
unsigned int a;
a=a | (1<<3);//将a第三位置1
a=a & ~(1<<3);//第三位置0
a=a|(5<<3)&~(5<<3)//将[7:4]置为0101
//打印整数为二进制
思路:让整数a与1移k位(sizeof(a)*8-1~0)相与,若为1则输出1、若为0则输出0


6.char 16进制显示是32位: %x 是 unsigned int 或  int 型输出 ,负数补1  正数补0

总结:字符串与指针还为明晰、 ++与* 式中若没有括号 一般从右往左看,括号内a++同样是后赋值、 有符号负数右移补1,一般开发中使用左移

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jun531921

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值