位运算和sizeof运算符
C语言中提供了一些运算符可以直接操作整数的位,称为位运算,因此位运算中的操作数都必须是整型的。位运算的效率是比较高的,而且位运算运用好的话会达到意想不到的效果。位运算主要有6种:与(&),或(|),取反(~),异或(^),左移(<<),右移(>>)。
1.位运算中的类型转换
位运算都必须进行Integer Promotion。在进行运算之前,都必须将char型、short型的数据转换为int或者unsigned int型再参与运算。
如下面这段程序:
#include<stdio.h> int main(void) { unsigned char c=0xfc; unsigned int i=~c; printf("0x%x\n",i); return 0; }
在对c取反之前,先将c提升为int型,则为0x000000fc,取反之后结果就是0xffffff03,所以程序输出结果是0xffffff03,而不是0x00000003.
2.异或运算的一些特性。
a^0=a,a^a=0这两个特性是异或运算最常用的特性。
利用这个特性可以不借助临时变量就可以交换两个整数
#include<stdio.h> int main(void) { int a=3; int b=2; a=a^b; b=a^b; a=a^b; printf("%d %d\n",a,b); return 0; }
不借助临时变量交换两个数据还可以用另外一种方法。
a=a+b;
b=a-b;
a=a-b;
这两种方法各有优点和缺点,位运算只能用于交换整数,而第二种可能会发生溢出。
3.sizeof运算符
sizeof是一个特殊的运算符,它有两种形式:sizeof 表达式和sizeof (类型名).对于sizeof运算符要注意几点:
1)如果是表达式的话,括号可以省略,但是对于类型,括号不能省;
2)sizeof求算的是所占的空间,如果作用于表达式,这个表达式是不进行求值的,只根据类型转换求得表达式的类型,而表达式的类型在编译时就可以确定。
#include<stdio.h> int main(void) { int i=1; int j; j=sizeof i++; printf("%d %d\n",i,j); return 0; }
程序执行结果为:
1 4
Press any key to continue
可以看出i的值并没有改变,可知表达式i++并没有进行求值。
再看下面这个程序:
#include <stdio.h> int main(int argc, char *argv[]) { char ch ='a'; int i =10; printf("%d\n",sizeof i+ch); return 0; }
执行结果为:
101
在有二元运算符的表达式中,必须加括号,否则sizeof只会对第一个操作数进行空间计算。由于ch的整形值为97,加上4,便是101了。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
C++ 运算符 sizeof 是一个关键字,它是一个编译时运算符,用于判断变量或数据类型的字节大小。 sizeof 运算符可用于获取类、结构、共用体和其他用户自定义数据类型的大小。 使用 sizeof 的语法如下: sizeof (data type) 其中,data type 是要计算大小的数据类型,包括类、结构、共用体和其他用户自定义数据类型。 请尝试下面的实例,理解 C++ 中 size
主要内容:按位与运算(&),按位或运算(|),按位异或运算(^),取反运算(~),左移运算(<<),右移运算(>>)所谓 位运算,就是对一个比特(Bit)位进行操作。在《 数据在内存中的存储》一节中讲到,比特(Bit)是一个电子元器件,8个比特构成一个字节(Byte),它已经是粒度最小的可操作单元了。 C语言提供了六种位运算符: 运算符 & | ^ ~ << >> 说明 按位与 按位或 按位异或 取反 左移 右移 按位与运算(&) 一个比特(Bit)位只有 0 和 1 两个取值,只有参与 运算的
在 C 语言中,相同的数字可以用不同的数制来表示。也就是十进制的数字可以等价的表示为二进制或者十六进制。那么对于二进制来说,可以进行逐个数字之间,也就是每一个数字位的运算。这种运算也广泛的存在我们日程使用的数字电路中。其实计算机的运算原理最底层就是位运算,也就是 0 和 1 的运算。 1. 位运算符 运算符 作用 示例 & 位与 a&b | 位或 a|b ^ 位异或 a^b ~ 位非 ~b <<
本文向大家介绍C 语言基础----详解C中的运算符,包括了C 语言基础----详解C中的运算符的使用技巧和注意事项,需要的朋友参考一下 C语言中又有哪些运算符呢? 如下所示: ※ 算术运算符 ※ 赋值运算符 ※ 关系运算符 ※ 逻辑运算符 ※ 三目运算符 C语言基本算术运算符如下表: 除法运算中注意: 如果相除的两个数都是整数的话,则结果也为整数,小数部分省略,如果两数中有一个为小数,结果则为小数
如果希望获得两个数中最大的一个,可以使用 if 语句,例如: 不过,C语言提供了一种更加简单的方法,叫做 条件运算符,语法格式为: 表达式1 ? 表达式2 : 表达式3 条件运算符是C语言中唯一的一个三目运算符,其求值规则为:如果表达式1的值为真,则以表达式2 的值作为整个条件表达式的值,否则以表达式3的值作为整个条件表达式的值。条件表达式通常用于赋值语句之中。 上面的 if else 语句等价于
主要内容:逻辑运算的结果,优先级现在假设有这样一种情况,我们的软件比较特殊,要求使用者必须成年,并且成绩大于等于60,该怎么办呢? 或许你会想到使用嵌套的 if 语句,类似下面这样的代码: 这种方法虽然能够行得通,但不够简洁和专业,我们可以将其压缩为一条 if else 语句: 是一个新的运算符,称为 逻辑运算符,表示 和 两个条件必须同时成立才能执行 if 后面的代码,否则就执行 else 后面的代码。 在高中数学中,我们就学