C语言补码(C语言学习笔记)
2024-09-01 16:56:59
记录
在学习C语言数据范围时了解到了补码的概念,记录一下什么是补码,补码怎么运算的
运算
原文链接:https://www.cnblogs.com/lsgsanxiao/p/5113305.html
补码主要是为了cpu运算器在进行减法运算时避免借位而设立的。
在早期,cpu中的运算器部分,只要实现一个加法器就可以完成四由算术运算。
因为计算机中的数值编码是有限位数的,所以减法实际上相当于加上减数的补码,而乘法是循环的加法,除法是循环的减法。这种思想在数学上叫转化思想,在兵法上与”借刀杀人“、”借尸还魂“的借是“异曲同工”,用牛顿的话叫做“站在巨人的肩上“。
举例说明,以8位的二进制为例,要计算1-1,只要用1加上-1的补码即可。
-1的原码:1000 0001,最高位是符号为,1表示负数,0表示正数。
-1的反码:1111 1110, 按位取反是除符号位以外,其它每个位上的0变成1,1变成0。
-1的补码:1111 1111,在反码的基础上是加上1即为补码。
1-1 = 1+ 1111 1111 = 1 0000 0000 ,因为只有8位的二进制表示方法,此时溢出了,溢出位在硬件上是没法表示的,因此结果还是0.
链接:https://www.cnblogs.com/yf4695/p/9102411.html
对于有符号类型的数据,它的最高位为符号位,正数的符号位是 0 ,负数的符号位是 1
正数的原码、反码、补码都一样
计算机中实际存储的是补码
负数如-15,10001111(原码),11110000(反码,符号位不变,其余为取反),11110001(补码,反码加1);将负数的补码化为原码:先减1,然后符号位不变,其余位取反
负数的原码+补码=00000000
如果只是通过负数的补码求其绝对值,则:将补码全部位取反+1(11110001(-15补码)--->00001110--->00001111)
最新文章
- Apache多站点配置及启动失败解决办法
- HTK学习2:工具使用
- C --gettimeofday===获取某个程序经历的时间
- 关于Excel导入导出的用例设计
- MouseJack:利用15美元的工具和15行代码控制无线鼠标和键盘
- WPF中log4net的用法
- RocketMQ常用命令
- PTA 06-图3 六度空间 (30分)
- 防御SQL注入的方法总结
- CSS3 加载进度样式
- powershell 生成随机用户信息
- 英语曰曰曰No.523
- 《Redis入门指南》第2版 读书笔记
- PowerShell执行脚本时“系统上禁止运行脚本”问题解决
- 抓包工具tcpdump用法说明
- servlet 会话技术
- Linux 系统开启随机端口数量 调优
- cdnbest日志分析显示404的原因
- 互评beta版本 - hello word!【空天猎】
- ctex2.9.2输出中文
热门文章
- Mysql性能优化专栏
- 架构师基础技能-搭建gitLab
- Java IO流 BufferedInputStream、BufferedOutputStream的基本使用
- html 05-HTML标签图文详解(二)
- [打基础]OI/ACM基本功&;一些小功能的实现&;一些错误(持续更新)
- [日常摸鱼]bzoj2038[2009国家集训队]小Z的袜子-莫队算法
- [日常摸鱼]bzoj2463 [中山市选2009]谁能赢呢?
- inotifywait命令如何监控文件变化?
- C盘满了删除C盘文件
- 【磁盘/文件系统】第二篇:标准磁盘分区流程针对fdisk(硬盘容量小于2T且分区数不能大于15个分区)