c - 为什么这个班次插入 1?C
问题描述
我正在尝试创建一个全为 0 的 32 位二进制文件,除了 srt 到 end 为 1。因此,如果 srt 为 2 且 end 为 7,我将得到 00000000 00000000 00000001 11111100。当我进行第二次移位时,它会给出更多的 1 而不是零,我不知道为什么。非常了解 C 和位操作,如果有人可以解释我将非常感激。
int groupOne(int srt, int end){
int mask =-1;
int ret;
ret = 1<<end;
ret=ret<<srt;
ret = mask+ret;
return ret;
}
解决方案
来自 C 委员会草案 (N1570):
6.5.7 位移位运算符
...
语义
3 整数提升在每个操作数上执行。结果的类型是提升的左操作数的类型。如果右操作数的值为负数或大于或等于提升的左操作数的宽度,则行为未定义。4 的结果
E1 << E2
是E1
左移的E2
位位置;空出的位用零填充。如果E1
具有无符号类型,则结果的值为E1 × 2E2
(2 次方 E2),比结果类型中可表示的最大值多模一减模。如果E1
有一个有符号类型和非负值,并且E1 × 2E2
(2 power E2) 在结果类型中是可表示的,那么这就是结果值;否则,行为未定义。5 结果
E1 >> E2
是E1
右移的E2
位位置。如果E1
具有无符号类型或E1
具有带符号类型和非负值,则结果的值是E1 / 2E2
(2 幂 E2) 商的整数部分。如果E1
具有带符号类型和负值,则结果值是实现定义的。
推荐阅读
- python - 通道 - 收到信号时如何通过 websocket 发送数据?
- kubernetes-helm - 使用不同的 Docker 镜像标签升级 Helm 图表
- c - CS50 问题集 3 中的逻辑缺陷 - Tideman?
- python - 将存储在变量中的多个字符串转换为python中的单个列表
- powerbi - 无法部署 SSAS 项目。原因:“生日”的语法不正确
- javascript - 如何使用jquery添加和删除元素的类
- python - 如何沿给定线从栅格中提取价值概况?
- python - 计算已知点组的密度
- java - 使用 java 调用远程系统 LPEX 编辑器
- sql - 使用 SQL 查找/标记重复值