C语言中的位移运算
来源:互联网 发布:pic单片机eeprom 编辑:程序博客网 时间:2024/04/29 09:23
C语言提供了一组位移运算,C表达式x<<k会生成一个值,x向左移动k位,丢弃最高的k位,并在右端补k个0,移位运算时从左至右可结合的,所以x<<k<<j等价于(x<<k)<<j。还有一个相应的右移运算x>>k,但它的行为有点微妙,一般而言机器支持两种形式的右移:逻辑右移和算术右移。逻辑右移是在左端不k个0,算术右移是在左端补k个最高有效位的值,逻辑右移和算术右移在对有符号整数数据的位移操作中非常有用,如
唯一的例外就是算术右移[10010101]的情况,因为操作数的最高位是1,填充的值就是1。(简单粗暴点记忆就是最高位符号位为0都填0,最高符号位为1就都填1)C语言标准并没有明确定义应该使用哪种类型的右移。对于无符号数据(unsigned声明),右移必须是逻辑的。而对于有符号数据,算术位移或者逻辑位移都可以,不幸的是这意味着两种都有可能,造成代码的潜在性可移植问题。然而实际上,几乎所有的编译器/机器组合度对有符号数据使用算术右移,且许多程序员也都假设机器会使用算术右移。java对如何右移有明确定义,表达式x>>k表示将x算术右移k个位置,表达式x>>>k表示将x逻辑右移k个位置。另如果x>>k中k是个很大的值时,许多机器会以x实际所占位对k求余,x为w位,实际右移k mod w位,在32位机器上执行int x>>36时,实际移动为int x>>4。
0 0
- C语言中的位移运算
- C语言中的位移运算
- C语言中的位移运算
- c语言位移运算
- C语言的位移运算
- C语言的位移运算
- C语言的位移运算
- C语言中位移位运算符
- C语言中位移位运算符
- C语言中位移位运算符
- C语言中位移位运算符
- C语言的位移运算符
- C语言中位移运算的规则
- C语言标准中的逻辑位移和算术位移
- C语言标准中的逻辑位移和算术位移
- C语言中位运算符--位移运算符
- c语言中的位移位操作
- c语言中的位移位操作
- LeetCode OJ String to Integer (atoi)
- [iPhone高级] 基于XMPP的IOS聊天客户端程序(XMPP服务器架构)
- #个人赛第六场解题总结#
- JAVA学习笔记(八)- 字符串类和方法
- HDOJ 题目4602 Partition(找规律,快速幂)
- C语言中的位移运算
- 第三方支付平台-框架介绍
- LeetCode OJ ZigZag Conversion
- 关于jsp内置对象Session和Cookie使用的肤浅理解,如何使用Session来统计网站在线人数
- 子类对基类数组的引用
- LeetCode OJ Longest Substring Without Repeating Characters
- 链表在第几个位置添加和删除
- LeetCode OJ Valid Sudoku
- 恒生电子2015春季校招笔试题