017day(位运算的学习和字符串的初步了解)

本文介绍了位运算的基础知识,包括按位与、按位或、按位异或、按位非、左移和右移等操作符的使用,并探讨了它们在实际编程中的应用。此外,还介绍了字符串的三种形式及其基本特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《2017年10月27日》【连续017天】

标题:位运算的学习和字符串的初步了解

内容:A.观看MOOC6.5,7.1;

           B.(a).位运算:用于对整数类型(如int,char,long等)变量中某一位(bit)或若干位进行操作。

位运算有六种运算符:

& 按位与(双目):

将参与运算的两操作数各对应的二进制位进行操作(当对应的两个二进制位均为1时,结果的二进制位才为1,否则为0)

21 & 18 结果为16

21:0001 0101 (注意,int类型有32位short类型有16位21的前24位均为0,我进行了省略

18:0001 0010 (前24位省略

16:0001 0000 (前24位省略

通常可用来使某变量的某些位清零,其它位不变;

如:将int型变量的低8位置成0,其余位不变:n =n & 0xffffff00 (n &=0xffffff00);如果n是short类型的,则只需执行:n &= 0xff00;(十六进制的一位相当于二进制的四位

 

也可以获取某变量中某一位;

如:判断int型变量n的第七位(从右到左,从0开始(即第0位,第1位,……,第31位)是否为1:n &=0x80 (0x80 :1000 0000)

 

|  按位或(双目)

将参与运算的两操作数各对应的二进制位进行操作(当对应的两个二进制位均为0时,结果的二进制位才为0,否则为1)

21 | 18结果为23:0001 0111(前24位省略)

通常可用来使某变量的某些位置1,其它位不变;

如:将int型变量的低8位全置1,其它位不变:n |= 0xff;(0xff: 1111 1111)

 

^ 按位异或(双目)

将参与运算的两操作数各对应的二进制位进行异或操作(当对应的两个二进制位不相同时,结果的二进制位才为1,否则为0)

21 ^ 18结果为7:0000 0111(前24位省略)

通常可用来使某变量的某些位取反,其它位不变;

如:将int型变量的低8位取反,其它位不变:n ^=0xff;

特点:a^b=c,则c^b=a,c^a=b。

如:int a=5,b=7;
a=a^b;
b=b^a;
a=a^b;
cout<<a<<" "<<b;

运行结果为7 5;

 

~ 按位非(取反)(单目)

将操作数中的二进制位0变成1,1变成0;

  21:0000 0000 0000 0000 0000 0000 0001 0101

~21:1111 1111 1111 1111 1111 1111 1110 1010

 

<< 左移(双目)

表达式:a<<b;它的值是将a的各二进制位全部左移b位得到的值。高位丢弃,低位补0;a值不因运算而改变;

实际上,左移1位,等于乘以2,左移n位,等于乘以2^n,而左移比乘法快得多;

>> 右移 (双目)

表达式:a>>b;它的值是将a的各二进制位全部右移b位得到的值。右移时,低位丢弃;a值不变;

对于有符号数,(long,int ,short,char等),符号位(即最高位)将一起移动,如果原符号位为1,高位补1,原符号位为0,高位补0

右移n位,相当于除以2^n,且结果往小取整

例题:int a,n(0<=n<=31);求表达式,使表达式的值和a的第n位相同;

(a>>n) &1;

当0<=n<31时,(a &(1<<n))>>n(当n=31事,n为符号位,若符号位为1,则最后右移后,结果不为1,为0xffffffff)

            (b).字符串有三种形式:1.用双引号括起来的字符串常量;

                                                         2.存放于字符数组中,以‘、0’字符结尾;

                                                         3.string对象;

字符串常量:字符串常量占据的内存的字节数相当于字符串中字符数目加1;多出来的是结尾字符'\0';

字符串长度不包含'\0';

""是合法的字符串常量,称为“空串”,占据一个字节,存放'\0';

双引号'\"',斜杠'\\',详见004day

 

明日计划:继续学习字符串;

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值