补码问题
来源:互联网 发布:郑州淘宝加盟判刑 编辑:程序博客网 时间:2024/04/28 15:50
,正数原码:最高位符号位为0。
负数原码:最高位符号位为1,其余位为其对应正数的原码位。
6的原码: 0000 0110
-6的原码:1000 0110
正数反码:与原码一样。
负数反码:符号位不变,其余为取反。
6的反码: 0000 0110
-6的反码:1111 1001
正数补码: 与原码相同。
负数补码: 其反码加1。
6的补码: 0000 0110
-6的补码: 1111 1010
方法1:符号位不变,取反再加1。
方法1:符号位不变,减1再取反。
方法‚2:符合位不变,取反再加1。
题目1:十进制数-10的3进制4位数补码?
解析:
方法1:对于一个8位的二进制负数a,有:|a|的原码+a的补码=1 0000 0000。所以有a的补码=1 0000 0000 - |a|的原码。同理,对于4位的三进制负数,同样有该性质。故-10的4位三进制补码=1 0000-10的4位三进制原码即为1 0000-0101=2122。
方法2:按定义来,即原码取反加1,-10的三进制原码中的符号位为多少呢?,我们知道二进制中,负数符号位为1,那么三进制中,负数的符号位就为2。所以-10的三进制原码为2101,好,然后符号位不变,其他位按三进制取反,那0,1,2按三进制取反为多少呢?,我们知道3进制数,每位最大只能为2,那么必须保证a+a的反=2,所以0取反为2,1取反为1,2取反为0。所以2101的反码为2121,然后再加1,即为2122就是-10的4位三进制补码。
题目2:十进制数-10的:4进制3位数补码?
方法1:首先求10的4进制3位原码为022,然后用1000-022 = 312即为所求。
方法2:-10的4进制3原码为322,然后其反码为311,再加1,即为312。
计算机中所有数据都以补码的形式存储。
#include <stdio.h>void main(int argc,char* argv[]){char a = 500;printf("%d\n",a);getchar();}
输出a的值为多少呢?
首先我们计算500的二进制补码,为1 1111 0100共9位,而char类型占一个字节,所以截取低8位,所以a的补码为1111 0100,又因为a是有符号数,最高位为1,为负数,其原码为1000 1100,所以输出a的值为-12。
- 补码问题
- 补码问题
- 补码问题
- 关于“-128的补码补码问题”理解
- 关于补码的问题
- 二进制补码问题
- 关于2的补码问题
- 补码、反码的相关问题
- 补码
- 补码
- 补码
- 补码
- 补码
- 补码
- 补码
- 补码
- 补码
- 补码
- hdu4544(贪心+优先级队列)
- Webservice_07_schema进阶
- SQL位运算
- C++精确计算代码执行时间精度微秒级
- javafx2导出文件选择路径
- 补码问题
- hdu 4010(LinkCutTree)
- C++整型\字符串\数组的相互转换
- 树形DP总结(转)
- SPOJ - WMELON(离散化+暴力or离散化+线段树)【待完善】
- UITableView样式的自定义
- 涂鸦 画线
- android noclassdeffounderror:jxl.workbook
- 生活杂记