位运算和sizeof运算符

C语言中提供了一些运算符可以直接操作整数的位,称为位运算,因此位运算中的操作数都必须是整型的。位运算的效率是比较高的,而且位运算运用好的话会达到意想不到的效果。位运算主要有6种:与(&),或(|),取反(~),异或(^),左移(<>)。

1.位运算中的类型转换

位运算都必须进行Integer Promotion。在进行运算之前,都必须将char型、short型的数据转换为int或者unsigned int型再参与运算。

如下面这段程序:

#include

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

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

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

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了。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

sizeof是c语言的一种运算符,C语言位运算和sizeof运算符详解相关推荐

  1. 位运算和sizeof运算符

    位运算和sizeof运算符 C语言中提供了一些运算符可以直接操作整数的位,称为位运算,因此位运算中的操作数都必须是整型的.位运算的效率是比较高的,而且位运算运用好的话会达到意想不到的效果.位运算主要有 ...

  2. python语言与蟒蛇_1、python语言是一种“大蟒蛇语言‘’,但是python语言却和蟒蛇没有任何关系_学小易找答案...

    [单选题]最早的显微镜是有谁发明的?( ) [简答题]已知斜度,抄画图形. [简答题]什么是程序设计? [简答题]简述承保年度制满期赔付率涵义 [单选题]筹集股权资本是企业筹集( )的一种重要方式. ...

  3. 7、Java四种进制及位运算介绍

    7.Java四种进制及位运算介绍 四种进制: 二进制:0,1 以0b或0B开头 十进制:0-9 八进制:0-7 以数字0开头 十六进制:0-9 及A(10)-F(15) ,以0x或0X开头,此处A-F ...

  4. R语言使用survminer包生存分析及可视化(ggsurvplot)实战详解:从数据集导入、生存对象生成、ggsurvplot可视化参数配置、设置、可视化对比

    R语言使用survminer包生存分析及可视化(ggsurvplot)实战详解:从数据集导入.生存对象生成.ggsurvplot可视化参数配置.设置.可视化对比 目录 R语言使用survminer包生 ...

  5. leetcode84- 柱状图中最大的矩形(三种思路:暴力,单调栈+哨兵(详解),分治)

    leetcode84- 柱状图中最大的矩形(三种思路:暴力,单调栈+哨兵(详解),分治) 介绍 题目 解题思路 解法一:暴力向两边搜索 解法二:单调栈 画图演示 宽度计算: 解法三:单调栈+哨兵 解法 ...

  6. C语言是一种怎样的语言,零基础学习C语言难不难?

    C语言除了能让你了解编程的相关概念,带你走进编程的大门,还能让你明白程序的运行原理,比如,计算机的各个部件是如何交互的,程序在内存中是一种怎样的状态,操作系统和用户程序之间有着怎样的"爱恨情 ...

  7. c语言运算符 amp 的意思,C++中运算符 amp;和amp;amp;、|和|| 的详解及区别

    C++中运算符 &和&&.|和|| 的详解及区别 简介: &&是逻辑与运算符,||是逻辑或运算符,都是逻辑运算符,两边只能是bool类型 &与| 既可以 ...

  8. python左移位运算_python 移位运算符只能用于整型吗

    匿名用户 1级 2016-12-29 回答 什么是操作符? 简单的回答可以使用表达式4 + 5等于9,在这里4和5被称为操作数,+被称为操符. Python语言支持操作者有以下几种类型. 算术运算符 ...

  9. c语言字符指针初始化赋值,C语言_指针变量的赋值与运算,很详细详解

    指针变量的赋值 指针变量同普通变量一样,使用之前不仅要定义说明, 而且必须赋予具体的值.未经赋值的指针变量不能使用, 否则将造成系统混乱,甚至死机.指针变量的赋值只能赋予地址, 决不能赋予任何其它数据 ...

最新文章

  1. 管理不再是交换,而是相互成全!做到这三点,管理更有成效!
  2. java+jvm+log_java9 gc log参数迁移
  3. day20-自定义分页2
  4. sqlite 统计每张表的记录数_Excel单页式人事管理表,档案记录,自带查询统计,简单实用...
  5. 工作228:小程序学习2开始布局页面2
  6. lecture3-线性神经元和算法
  7. 搜索场景下的智能推荐演变之路
  8. linux php和java环境变量配置_Linux下配置Java环境变量
  9. ibm mq的交互命令模式_IBM的完整形式是什么?
  10. PHPMailer目录和命名空间没有错,但是始终class not found,的原因和解决方法
  11. 最大公约数和最小公倍数问题(洛谷-P1029)
  12. CCF-CSP认证考试历年试题集
  13. 介绍Unity中相机的投影矩阵与剪切图像、投影概念
  14. Android 静默安装
  15. 9 个出色的 JavaScript 库推荐【云图智联】
  16. java setw_C++ setw:格式化输出(详解版)
  17. python淘宝cookies抢购_Python爬虫利用cookie抓取淘宝商品比价
  18. [转]如何高效迅速地进入500强外企
  19. [Luogu P2597] [BZOJ 2815] [ZJOI2012]灾难
  20. 条码枪扫码时,只能在文本框录入一位字符的问题

热门文章

  1. Acwing第 16 场周赛【未完结】
  2. 【AC Saber】双指针
  3. to_string()函数----将int类型转换为string型
  4. Linux之数值运算:let,(()),[ ]
  5. Spring boot的场景启动器
  6. Freemarker循环遍历
  7. jQuery的事件方法
  8. python字符串类型_python字符串类型介绍
  9. 【数据结构-图】2.多图详解最小生成树(多图详解+实现代码)
  10. mysql可以靠索引,而我只能靠打工,加油,打工人!