3.读c语言深度剖析 -- 单引号与双引号、逻辑运算符、位运算符、花括号

原创 2011年11月06日 10:43:18
 

单引号与双引号

我们知道双引号引起来的都是字符串常量,单引号引起来的都是字符常量。

比如:‘a’和“a”完全不一样,在内存里前者占1byte,后者占2byte

1,‘1‘,“1”。

第一个是整形常数,32位系统下占4byte第二个是字符常量,占1byte第三个是字符串常量,占2byte

三者表示的意义完全不一样,所占的内存大小也不一样

字符在内存里是以ASCAII码 存储的,所以字符常量可以与整形常量或变量进行运算。如:‘A+1

关于字符串常量在指针与数组那章将有更多的讨论。

 逻辑运算符

||  和&& 是我们经常用到的逻辑运算符,与按位运算符|&是两码事。虽然简单,但毕竟容易犯错。看例子:

int i=0;

int j=0;

if( (++i>0) || (++j>0) )

{

   //打印出ij的值。

}

结果:i=1;j=0。不要惊讶。

逻辑运算符||两边的条件只要有一个为真,其结果就真;只要有一个结果为假,其结果就为假。

if((++i>0)||(++j>0))语句中,先计算(++i>0),发现其结果为真,后面的(++j>0)便不再计算。

同样&&运算符也要注意这种情况。这是很容易出错的地方,一定要注意。

位运算符

C语言中位运算包括下面几种:

&按位与    |按位或    ^按位异或

~取反     <<左移    >>右移

4种操作很简单,一般不会出错。但要注意按位运算符|&与逻辑运算符||&&完全是两码事,别混淆了。

其中按位异或操作可以实现不用第三个临时变量交换两个变量的值:a^=b;   b^=a;  a^=b;

但并不推荐这么做,因为这样的代码读起来很费劲。

左移和右移

左移运算符<<”是双目运算符。

其功能把“<<”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0

右移运算符>>”是双目运算符。

其功能是把“>>”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。

但注意:对于有符号数,在右移时,符号位将随同移动.

当为正数时,最高位补0;

而为负数时,符号位为1,最高位是补0或是补1取决于编译系统的规定TurboC和很多系统规定为补1

0x01<<2+3的值为多少?

结果为7吗?测试一下。结果为为 32

因为“+”号的优先级比移位运算符的优先级高

好,在32位系统下,再把这个例子改写一下:

0x01<<2+30;或0x01<<2-3

这样行吗?不行。一个整型数长度为32位,左移32位发生了什么事情?

溢出!左移-1位呢?反过来移?

切记,左移和右移的位数是有讲究的。左移和右移的位数不能大于数据的长度,不能小于0

花括号

char a[10]= {“abcde”};

char a[10]=“abcde”;    两者均正确输出效果是一样的

花括号的作用是什么呢?我们平时写函数,ifwhileforswitch语句等都用到了它

但有时又省略掉了它。简单来说花括号的作用就是打包。使之形成一个整体,并与外界绝缘。

tcl/tk中大括号与双引号分组的不同

tcl/tk中使用大括号{}和双引号“”进行分组,使其成为一个变元,但是有一个区别:大括号阻止在分组中出现替换操作,而后者允许这样做。例如:% set s HelloHello% puts stdou...
  • manbujingxin
  • manbujingxin
  • 2011年04月27日 11:38
  • 3143

C/C++之位运算符与逻辑运算符详解

一、位运算符用法     C语言中的位运算符主要有以下几种:         使用的时候主要有以下几个注意点:     1.左移运算符将     2.右移运算符将>>将运...
  • Bruce_0712
  • Bruce_0712
  • 2017年03月19日 09:43
  • 485

Java逻辑运算符和位运算符详解

一.逻辑运算符 逻辑运算符共有三种,即“非”、“和”、“或”,分别用 " ! "、“&&”、“||”表示。其中: 非运算(!)表示否定,如:!true等于false、!false等于tru...
  • softn
  • softn
  • 2016年06月01日 06:43
  • 272

&和&&的区别,逻辑运算符和位运算符

&:按位操作符(“与”),将两个表达式的值按二进制位展开,对应的位(bit)按值进行”与”运算,结果保留在该位上。 eg1:17&18 对应的二进制就是00010010             ...
  • zhangzhangliyin
  • zhangzhangliyin
  • 2016年05月08日 11:43
  • 4073

PHP中单引号、双引号、并置符以及花括号的使用

PHP中单引号、双引号、并置符以及大括号的使用。在PHP中字符串可以用单引号和双引号两种输出,不过相比较来说,前者效率略高,但二者还是有不同之处。单引号不解析变量和转义字符,双引号则两者兼备。至于并置...
  • Dawnfox
  • Dawnfox
  • 2014年08月29日 11:18
  • 2070

C++的单引号和双引号区别

单引号是char类型,双引号是字符串类型。 char ch; if (ch == "1"){ value += static_cast(power(2, i)); } 当我使用双引号时,代码...
  • lqsgd123
  • lqsgd123
  • 2017年07月15日 14:09
  • 1090

SQL中 关于&、双引号、和单引号的解释

SQL中 关于&、双引号、和单引号的解释 2011-12-19 13:27 下面先简单地说一下他们的意义。      (1)&是连接运算符,它可以将两个字符串连接成一个字符串。      ...
  • haizhongyun
  • haizhongyun
  • 2012年04月14日 16:13
  • 980

js中单引号和双引号的使用区别

1.引入 在jquery或者js中拼接字符串时,使用单引号和双引号是没有区别的,都可以被成功解析成字符串,但是,在一些复杂的字符串拼接时,需要单引号和双引号的混合使用时,就需要注意了。最近在项目中写...
  • ya_1249463314
  • ya_1249463314
  • 2016年12月21日 11:30
  • 6320

java 中的单引号与双引号

习惯了php的单引号,在写java时,还总是写单引号,这样就出错了,因为在java中单引号是用来写字符型的: 如: char str='a'; 而双引号是用来写字符串的,如果在单引号里写...
  • vonreynard
  • vonreynard
  • 2014年01月17日 16:19
  • 5165

linux 中的单引号 和双引号有什么区别

单引号与双引号的最大不同在于双引号仍然可以保有变量的内容,但单引号内仅能是 一般字符 ,而不会有特殊符号。我们以底下的例子做说明:假设您定义了一个变量, name=VBi...
  • nodeman
  • nodeman
  • 2015年09月11日 13:34
  • 1515
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:3.读c语言深度剖析 -- 单引号与双引号、逻辑运算符、位运算符、花括号
举报原因:
原因补充:

(最多只允许输入30个字)