关于有符号整数的补码编码的一点经验

以一个字节(8位)编码为例,如果采用补码,则表示的整数(有符号数)范围是[-128,127]。

如果把该二进制编码表示为十进制,则8位编码对应的十进制为0-255,(或者说表示为无符号数就是0-255)

其中[0-127]表示正整数,也是该数本身(对应的无符号数和有符号数一样且都是正整数),绝对值递增

[128-255]表示负整数,其中128表示-128 ,255 表示 -1,也就是说绝对值是递减的。

所以根据编码快速求出编码前的数的方法之一是:如果编码为0-127,那么编码前的数也是0-127,如果编码为128-255,假设为x,那么编码前的数的真值就是-(256-x)。

时间: 2024-10-10 07:47:20

关于有符号整数的补码编码的一点经验的相关文章

深入理解计算机系统(2.4)------整数的表示(无符号编码和补码编码)

上一篇博客我们主要介绍了布尔代数和C语言当中的几个运算符.那么这一篇博客我们主要介绍在计算机中整数是如何表示的,诸如我们在编码过程中遇到的对数据类型进行强制转换可能会得到意想不到的结果在这篇博客里你会得到解答. 1.什么是整数? 整数包含正整数,0,负整数.我们从小的数学常识,整数是无穷无尽的,即整数的大小没有限制. 但是在计算机中则不能这样理解,因为计算机是靠数字信号来表示数,计算机所能处理的整数的长度是由计算机的字长来决定的,所以,在计算机中,我们必须制定一个规则来表示整数. 2.C 语言中

二进制(1):无符号编码和补码编码

一些数学符号的解释: 求和符号:∑5i=0xi=x0+x1+x2+x3+x4+x5 x?  表示向量x ,一组1和0,例如[1010 1100]. xi此位向量中第i个位. 向量中最右边的位为第0位,向左依次加1. mod 取模运算 ,求余数运算. 1 mod 2=1 // 3 mod 2=1.在二进制系统中,一个位向量 mod 2k 相当于将此向量截断到k位 . 例如 [1111 1111] (十进制为255)mod 23=[0000 0111](十进制为7). 111100002=24010

无符号整数和有符号整数

源码:将一个整数换算成二进制,就是其源码. 反码:正数的反码就是其源码,负数的反码是除符号位每一位取反. 补码:整数的补码就是其源码,负数的反码+1就是其补码. 1 #include<stdio.h> 2 int main() 3 { 4 unsigned int a=6; 5 int b=-20; 6 printf("%d\n",a+b); 7 (a+b)>6? puts(">6"):puts("<=6"); 8

为何八位有符号整数的范围是-128~127,而不是-127~128

八位的带符号的整数,比如JAVA中的byte,c#中的SByte,为什么值域范围都是-128-127而不是-127~128? 事实上,远古时期有些计算机的设计是采用了反码表示有符号数的,因此8位有符号数的范围是-127~127,它的一个缺点是0是有正负.它用一位表示正负数,然对剩余的位数采用取反. 比如,0111 1111表示127,那-127的则是1000 0000.0000 0000表示正的0,而1111 1111则表示成为负0.因此反码作为有符号的整数并未流行. 现在的计算机中,通常将正数

有符号整数类型的范围问题

符号整数类型的范围: 整数类型:byte,short,int,long byte: 8 位 -128--->127 short 16位 -32768--->32767 int   32位 -2147483648-->2147483647 long  64位  -9223372036854775808 --> 9223372036854775807 为什么是这样这样的范围: 原码:讲一个数转换为二进制,加上符号位就是原码(0表示整数,1表示负数) 反码:整数的反码就是其原码,负数的反

JavaScript:有符号整数与无符号整数相互转化

确实巧妙:原文http://blog.csdn.net/kandyer/article/details/8241937 <script language="JavaScript"><!--    var signed, unsigned;    signed = -1;    unsigned = signed>>>0;    alert ("unsigned="+unsigned);        // unsigned=429

有符号整数(int)的汉语读法。

请实现一个函数,给定一个32为有符号整数(int 类型),函数输出该数字符合汉语习惯的读法.例如:10086 读作 " 一万零八十六". #include<iostream> #include<list> #include<string> #include<stdlib.h> #include<math.h> using namespace std; void m_itoa(int num,list<char> &

有符号整数比较v.s.无符号整数比较

本文尝试从汇编的角度给出有符号整数比较与无符号整数比较的区别所在. 在<深入理解计算机系统>(英文版第二版)一书中的Page#77,有下面一个练习题: 将上述示例代码写入foo1.c文件,运行并分析bug产生的代码行. 1. foo1.c 1 #include <stdio.h> 2 3 float sum_elements(float a[], unsigned length) 4 { 5 int i; 6 float result = 0; 7 for (i = 0; i &l

如何将特殊符号转化成字符编码!

有时候使用一些小图标的时候,通常情况下,都是用的雪碧图将他们放在一起,然后通过背景调用,但是很多图标都是很简单的字符图标,却往往多增加了一些请求,大小也增加了(图片肯定比字符要大):为什么就不能将这些简单的字符图标用字符编码的形式来体现呢?这样性能不是更好吗?至少是一个网站优化的方向啊!所以我说干就干,在网上找找吧!照理说我这想法应该很多人都想到了啊,但是网上却很难找到把一些常用的字符图标转化为字符编码的文章或者是例子,然道是太简单了?还是说大神都不屑于做这样的事情!好吧,这叫我们这些菜鸟怎么办