C/C++中的移位运算
2016-04-01 11:53
363 查看
在计算机中,数值是以补码来表示和存储的。所以移位运算都是在“补码”上进行操作的。
原码转补码
正数的补码与原码相同。
负数的补码:符号位为1,其余位是原码按位取反(反码),然后整个数加1。
补码转原码
补码的符号位为0,正数的原码=补码
补码的符号位为1,负数的原码=补码的补码。即符号位不变(1),其余各位取反,再加1.
-5的源码:
1000 0101
补码:
1111 1011
按位右移:
补码左移:1111 1011 -> 1111 1101
输出源码,1111 1101的原码为:
1000 0011 (十进制:-3)
按位左移:
补码左移:1111 1011 -> 1111 0110
输出原码:1111 0110 -> 10001010 (十进制:-10)
原码转补码
正数的补码与原码相同。
负数的补码:符号位为1,其余位是原码按位取反(反码),然后整个数加1。
补码转原码
补码的符号位为0,正数的原码=补码
补码的符号位为1,负数的原码=补码的补码。即符号位不变(1),其余各位取反,再加1.
-5的源码:
1000 0101
补码:
1111 1011
按位右移:
cout << (-5>>1) << endl;
补码左移:1111 1011 -> 1111 1101
输出源码,1111 1101的原码为:
1000 0011 (十进制:-3)
按位左移:
cout << (-5<<1) << endl;
补码左移:1111 1011 -> 1111 0110
输出原码:1111 0110 -> 10001010 (十进制:-10)
相关文章推荐
- c语言字符数组与字符串的使用详解
- 第1周 《C语言及程序设计》资料3——C语言中转义字符
- C++ 访问属性
- 51单片机 C语言中全局变量的使用extern
- 深入理解C++的动态绑定和静态绑定
- 第1周 《C语言及程序设计》实践项目1——指针及其运算
- 一个关于友元和继承的问题
- 第1周 《C语言及程序设计》资料2——C语言中数学函数
- 第1周 《C语言及程序设计》资料1——C语言中的运算符
- codeblocks c++ 编译出错
- codeblocks c++ 编译出错
- C++标准库容器与迭代器
- C/C++二叉树搜索树操作集
- 用C语言进行CGI程序设计
- error C2660: “MessageBoxA” : 函数不接受 1 个参数
- C/C++编译常见链接错误
- C++ 抽象基类
- C语言运算符优先级记忆
- C语言基础知识
- C++中“->”和“.”在使用中有什么区别呢