sizeof是c语言的一种运算符,C语言位运算和sizeof运算符详解
位运算和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运算符详解相关推荐
- 位运算和sizeof运算符
位运算和sizeof运算符 C语言中提供了一些运算符可以直接操作整数的位,称为位运算,因此位运算中的操作数都必须是整型的.位运算的效率是比较高的,而且位运算运用好的话会达到意想不到的效果.位运算主要有 ...
- python语言与蟒蛇_1、python语言是一种“大蟒蛇语言‘’,但是python语言却和蟒蛇没有任何关系_学小易找答案...
[单选题]最早的显微镜是有谁发明的?( ) [简答题]已知斜度,抄画图形. [简答题]什么是程序设计? [简答题]简述承保年度制满期赔付率涵义 [单选题]筹集股权资本是企业筹集( )的一种重要方式. ...
- 7、Java四种进制及位运算介绍
7.Java四种进制及位运算介绍 四种进制: 二进制:0,1 以0b或0B开头 十进制:0-9 八进制:0-7 以数字0开头 十六进制:0-9 及A(10)-F(15) ,以0x或0X开头,此处A-F ...
- R语言使用survminer包生存分析及可视化(ggsurvplot)实战详解:从数据集导入、生存对象生成、ggsurvplot可视化参数配置、设置、可视化对比
R语言使用survminer包生存分析及可视化(ggsurvplot)实战详解:从数据集导入.生存对象生成.ggsurvplot可视化参数配置.设置.可视化对比 目录 R语言使用survminer包生 ...
- leetcode84- 柱状图中最大的矩形(三种思路:暴力,单调栈+哨兵(详解),分治)
leetcode84- 柱状图中最大的矩形(三种思路:暴力,单调栈+哨兵(详解),分治) 介绍 题目 解题思路 解法一:暴力向两边搜索 解法二:单调栈 画图演示 宽度计算: 解法三:单调栈+哨兵 解法 ...
- C语言是一种怎样的语言,零基础学习C语言难不难?
C语言除了能让你了解编程的相关概念,带你走进编程的大门,还能让你明白程序的运行原理,比如,计算机的各个部件是如何交互的,程序在内存中是一种怎样的状态,操作系统和用户程序之间有着怎样的"爱恨情 ...
- c语言运算符 amp 的意思,C++中运算符 amp;和amp;amp;、|和|| 的详解及区别
C++中运算符 &和&&.|和|| 的详解及区别 简介: &&是逻辑与运算符,||是逻辑或运算符,都是逻辑运算符,两边只能是bool类型 &与| 既可以 ...
- python左移位运算_python 移位运算符只能用于整型吗
匿名用户 1级 2016-12-29 回答 什么是操作符? 简单的回答可以使用表达式4 + 5等于9,在这里4和5被称为操作数,+被称为操符. Python语言支持操作者有以下几种类型. 算术运算符 ...
- c语言字符指针初始化赋值,C语言_指针变量的赋值与运算,很详细详解
指针变量的赋值 指针变量同普通变量一样,使用之前不仅要定义说明, 而且必须赋予具体的值.未经赋值的指针变量不能使用, 否则将造成系统混乱,甚至死机.指针变量的赋值只能赋予地址, 决不能赋予任何其它数据 ...
最新文章
- 管理不再是交换,而是相互成全!做到这三点,管理更有成效!
- java+jvm+log_java9 gc log参数迁移
- day20-自定义分页2
- sqlite 统计每张表的记录数_Excel单页式人事管理表,档案记录,自带查询统计,简单实用...
- 工作228:小程序学习2开始布局页面2
- lecture3-线性神经元和算法
- 搜索场景下的智能推荐演变之路
- linux php和java环境变量配置_Linux下配置Java环境变量
- ibm mq的交互命令模式_IBM的完整形式是什么?
- PHPMailer目录和命名空间没有错,但是始终class not found,的原因和解决方法
- 最大公约数和最小公倍数问题(洛谷-P1029)
- CCF-CSP认证考试历年试题集
- 介绍Unity中相机的投影矩阵与剪切图像、投影概念
- Android 静默安装
- 9 个出色的 JavaScript 库推荐【云图智联】
- java setw_C++ setw:格式化输出(详解版)
- python淘宝cookies抢购_Python爬虫利用cookie抓取淘宝商品比价
- [转]如何高效迅速地进入500强外企
- [Luogu P2597] [BZOJ 2815] [ZJOI2012]灾难
- 条码枪扫码时,只能在文本框录入一位字符的问题
热门文章
- Acwing第 16 场周赛【未完结】
- 【AC Saber】双指针
- to_string()函数----将int类型转换为string型
- Linux之数值运算:let,(()),[ ]
- Spring boot的场景启动器
- Freemarker循环遍历
- jQuery的事件方法
- python字符串类型_python字符串类型介绍
- 【数据结构-图】2.多图详解最小生成树(多图详解+实现代码)
- mysql可以靠索引,而我只能靠打工,加油,打工人!