(C++)按位取反
来源:互联网 发布:英雄钢笔美工9018 编辑:程序博客网 时间:2024/06/06 18:15
介绍
二进制是计算机运行和存储数据的基础,按位取反(以下称“取反”)也就是基于二进制进行的一个操作。所不同的是,在完成按位取反之后,还需要转换为“原码”。(人类可能无法接受二进制表示而更倾向于十进制)正数取反
取反就是将二进制表示的数字中的0变为1, 1变为0。其实原理很简单,但我一开始很难理解首先将数据转换为二进制表示(这里用整数),以10为例子。1.10用二进制表示就是0000 10102.计算补码:(正数的补码与原码相同,而正数的原码就是二进制)结果为0000 1010(补码)3.按位取反:1111 01014.开始把1111 0101转换为原码,从这里开始就要分情况了《1》如果最高位(从左边开始的第一位)为0则表示的就是正数:正数的原码和取反后的数相同。《2》如果最高位为1则表示的就是负数:先将已取反的数减去1,在对差进行取反(注意:保留最高位不变),最后加上一个负号。所以把1111 0101转换为原码后为 1000 1011 由于1表示的负数,所以可以理解为-000 1011 也就是-11了。负数取反
以-10为例1.先将-10取绝对值10, 10的二进制为 0000 10102.将0000 1010用补码表示:(对于负数的补码:将其对应正数的二进制取反后,加1)即为1111 0101+1=1111 01103.将补码按位取反得 0000 10014.将反码转换为原码(参考上一节,步骤4《1》):得 0000 1001所以-10按位取反后为9参考资料
- 按位取反的步骤和原理
- 补码 - 百度百科
0 0
- (C++)按位取反
- 内存整理(C/C++)
- (C/C++)
- 内存整理(C/C++)
- 密码学(C/C++)
- C&C++)试题
- utilities(C/C++)
- c/c++(二)
- C 基础 (C语句)
- static详解(c/c++)
- 算法大全(c,c++)
- 算法大全(C,C++)
- 结构体 (C/C++)
- [C/C++] 指针(详解)
- 随手记(C & C++)
- C语言笔记(C++)
- C++/C试题(转)
- 顺序表(c/c++)
- 比较时间格式是否相等的函数
- Java反转单链表(code)
- 使用ScrollView属性fillViewport解决android布局不能撑满全屏的问题
- Java Web开发框架对比—Part0—引言
- Android应用被强制停止后无法接受广播解决方案
- (C++)按位取反
- kernel 文档
- centos7之lamp环境搭建
- 农业垂直搜索引擎二》系统总设计
- 用java打开文件夹
- Spring MVC
- h5新标签和css3动画制作一个鼠标悬停的动画效果
- 排序算法总结实现
- 欢迎使用CSDN-markdown编辑器