发表日期: 2022-07-01 11:15:44 浏览次数:27
杭州企业网站设计 - 杭州高端网站定制 - 杭州品牌网站搭建 - 上往建站
:只有2个都为1,那么结果是1,否则为0;例如:1&1=1,1&0=0,0&0=0,0&1=0;
11 & 3 = 3
00001011
& 00000011
= 00000011 = 3
| :只要有一个是1,那么结果为1,否则为0;例如:1&1=1,1&0=1,0&0=0,0&1=1;
11 | 3 = 11
00001011
| 00000011
= 00001011 = 11
>> :向右位移,就是把尾数去掉位数,例如:153 >> 2,153的二进制是:10011001,屁股后面去掉 2 位 100110,100110 转化成十进制就是 38,153 = 10011001,38 =100110,"01" 去掉了。
<< :向左位移,就是把开头两位数去掉,尾数加位数00,例如:
107 = 0110 1011 <<2
<<
172 = 1010 1100
在计算机中由于是32位的
107 = 0000 0000 0000 0000 0000 0000 0110 1011 <<2
<<
428 = 0000 0000 0000 0000 0000 0001 1010 1100
^ :两个相同的数会变成0,反之是1,例如:1&1=0,1&0=1,0&0=0,0&1=1;
11^3 = 8
00001011
^ 00000011
= 00001000 = 8
潴潴侠
潴潴侠
zsz***@qq.com
5年前 (2017-10-14)
ccf
130***0664@qq.com
109
关于逻辑运算符 && ,|| 的巧用方式
逻辑与 &&
&& 会先判断左边的值是否为真。
如果为假,那么整个表达式毫无疑问也为假。
如果为真,那就还需要判断右值,才能知道整个式子的值。
这个时候判断右值的过程就起了一个if的作用,可以利用这个过程判断右边表达式是否为真。
下面代码:
/*不用任何循环语句,不用if,来实现1+2+3+...+10的值*/
#include <iostream>
using namespace std;
int add(int c)
{
int a=0;
c&&(a=add(c-1));//递归循环,直到传入c的值为0则结束循环
cout<<c+a<<endl;
return c+a;
}
int main()
{
add(10);
return 0;
}
逻辑或 ||
其实与上面的逻辑与 && 大同小异。
都是先判断左边是否为真,再来考虑右边。
因为逻辑与 || 只需要左边为真,那么整个表达式就有值,就不会再去算右边的值了。
所以我们加个 ! 让 c 值为假时,!c 才为真,这样的话逻辑与 || 还需要判断右边的表达式才能计算出整个表达式的值。
(!c)||(a=add(c-1));
这样就达到了和用逻辑与&&时一样的目的。
代码:
/*不用任何循环语句,不用if,来实现1+2+3+...+10的值*/
#include <iostream>
using namespace std;
int add(int c)
{
int a=0;
(!c)||(a=add(c-1));//递归循环,直到传入c的值为0,(!c)就为真,结束循环
cout<<c+a<<endl;
return c+a;
}
int main()
{
add(10);
return 0;
}
ccf
ccf
130***0664@qq.com
5年前 (2017-10-21)
lhshengshi
510***747@qq.com
参考地址
16
除法/和求模%若两个操作数是正数,则除法的结果是正数,求模的结果也是正数若两个操作数是负数,则除法的结果是正数,求模的结果是负数若只有一个操作数是负数,则除法和求模的结果取决于机器,除法可以确定结果是负数逻辑与和逻辑或操作符总是先计算其左操作数,然后再计算其右操作数,只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解其右操作数区分 if(i<j<k) 和 if(i<j && j<k)第一个i<j或者为0或者为1,只要k大于1,表达式就为true第二个必须i<j且j<k表达式才为true区分 if(val) 和 if(val == true)第一个只要val非零则表达式为true,val为0则表达式为false第二个只有val为1表达式为true,val非1则表达式为false
int val = 2;
if(val==true){ //不会进入if
cout<<"val==true"<<endl;
}
多个赋值操作符中,各对象必须具有相同的数据类型,或者具有可转换为同一类型的数据类型。
int ival; int *pval;
ival = pval = 0; //error 尽管ival和pval都可以赋值为0
string s1,s2;
s1 = s2 = "OK" //ok
如果指针指向不是用new分配的内存地址,则在该指针上使用delete是不合法的。
通常编译器不能断定一个指针是否指向动态对象,因此尽管这样做是错误的,但在大部分编译器上仍能运行通过,但是会产生运行时错误。整形提升
对于所有比int小的整形(char, signed char, unsigned char, short, unsigned short),如过该类型所有可能值都包含在int中,他们会被提升为int型,否则,他们将被提升为unsigned int。
对于包含signed和unsigned int型的表达式,表达式中的signed型整数会被转换为unsigned型。
int i = -5;
unsigned int ii = 1;
cout<<(i>ii)<<endl; //输出1,非常有趣的结果 原因是int型的i转换为unsigned int型
short i = -5;
unsigned short ii = 1;
cout<<(i>ii)<<endl; //输出0 比较时short和unsigned short都提升为int型
lhshengshi
lhshengshi
510***747@qq.com
参考地址
5年前 (2018-01-12)
上一页:杭州设计网页公司
下一页:杭州公众号代运营公司
备案号: 苏ICP备11067224号
CopyRight © 2011 书生商友信息科技 All Right Reserved
24小时服务热线:400-111-6878 E-MAIL:1120768800@qq.com QQ:1120768800
网址: https://www.768800.com 网站建设:上往建站
关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|
企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|
400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 昌平殡葬| 朝阳殡葬|
欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系
服务热线:400-111-6878