二进制中的符号位的区分以及表示

问题1:

  二进制中的表数范围是怎么得来的?
 无符号是0-255;
 有符号是-128-127;为什么是这样的范围?

8位二进制码有2^8=256个状态.如果用来表示无符号数,就可以表示0~255恰好256个二进制数;而如果表示带符号数,则最高位就是符号位,0表示"+",1表示"-",剩下的7位用来表示绝对(采用补码形式).0用"+0"表示,正数为+1~+127,负数为-1~-127,剩下一个"-0"则用来表示-128(在数学中,0是没有正负的),所以,带符号数的表示范围就成了-128~+127了.

 

    

原文地址:https://www.cnblogs.com/CrisZjie180228/p/9076438.html

时间: 2024-10-31 06:37:20

二进制中的符号位的区分以及表示的相关文章

C++ 中注意,零扩展和符号位扩展

版权声明:本文为博主原创文章,未经博主允许不得转载. 首先,介绍一下两种扩展的定义 转 http://blog.csdn.net/jaylong35/article/details/6160736 符号扩展:当用更多的内存存储某一个有符号数时,由于符号位位于该数的第一位,扩展之后,符号位仍然需要位于第一位,所以,当扩展一个负数的时候需要将扩展的高位全赋为1.对于正数而言,符号扩展和零扩展是一样的,因为符号位就是0. 比如一个用一个8位二进制表示-1,则是10000001 如果把这个书用16位二进

Java中的二进制及基本的位运算

Java中的二进制及基本的位运算 二进制是计算技术中广泛采用的一种数制.二进制数据是用0和1两个数码来表示的数.它的基数为2,进位规则是"逢二进一",借位规则是"借一当二",由18世纪德国数理哲学大师莱布尼兹发现.当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的.计算机中的二进制则是一个非常微小的开关,用"开"来表示1,"关"来表示0. 那么Java中的二进制又是怎么样的呢?让我们一起来揭开它神

浅谈Java中的补零扩展和补符号位扩展

今天,魏屌出了一道题,题目如下: 定义一个大头序的byte[]a={-1,-2,-3,-4},转换成short[]b.问b[0]和b[1]分别是多少? 乍一看,这题不难,无非就是移位操作,再进行组合.但是呢?对于用Java的童鞋来说,这里面有一个坑,稍不注意可能就踩进去了.在说之前,我先把代码和答案贴出来吧. 看到这里,可能有的童鞋比较奇怪,为啥要&0xff,这不相当于没变化吗?非也,不信我举个例子. 答案是-127和129.很奇怪不是吗?我想的明明都是-127啊!!! 解答这个问题之前,我们先

c语言:输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n

输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n? 解:第一步求这两个数的异或运算,将异或运算结果存起来:第二步统计这个运算结果当中1的位数 程序: #include<stdio.h> int count(int m,int n) { int t,count=0; t = m^n; while (t) { count++; t=t&(t-1); } return count; } int main() { int num1,num2,ret=0; printf(&qu

交换一个整数二进制表示中的奇数位和偶数位

题目 原文: 写程序交换一个整数二进制表示中的奇数位和偶数位,用尽可能少的代码实现. (比如,第0位和第1位交换,第2位和第3位交换…) 解答 这道题目比较简单.分别将这个整数的奇数位和偶数位提取出来,然后移位取或即可. 代码如下: int swap_bits(int x){ return ((x & 0x55555555) << 1) | ((x >> 1) & 0x55555555); } 当然也可以采用更自然的方式来写这段代码: int swap_bits1(

verilog中符号位的扩展问题

以下内容转自艾米电子 - 使用有符号数,Verilog(http://www.cnblogs.com/yuphone/archive/2010/12/12/1903647.html) Verilog-1995中的有符号数 在Verilog-1995中,只有integer数据类型被转移成有符号数,而reg和wire数据类型则被转移成无符号数.由于integer类型有固定的32位宽,因此它不太灵活.我们通常使用手动加上扩展位来实现有符号数运算.下面的代码片段将描述有符号数和无符号数的运算: 1 re

c语言中获取整数和浮点数的符号位

1. 为什么要获得符号位 很多时候,我们需要判断数值的正负,来做相应的逻辑处理.条件判断语句可以很好的完成这个需求.有时候会有下面的情况, if (x > 0) { x = x - 1; } else { x = 1 - x; } if (x < 0) { x = -x; } 正负只是数值的符号位变化,或是计算结果的符号位变化.但是我们需要用一个判断,首先条件判断会影响效率,其次格式不够简洁美观.所以,有时候希望能不用条件判断也解决问题.而数值的符号位已经被存储在了数值的最高位,可以利用这点来

Java千百问_03基本的语法(005)_二进制是如何做位运算的

点击进入_很多其它_Java千百问 二进制是如何做位运算的 程序中的全部数在计算机内存中都是以二进制的形式储存的.位运算说白了,就是直接对整数在内存中的二进制位进行操作. 其它运算符看这里:java种的运算符都有哪些 大部分运算流程都是先将整数转换为二进制.然后进行对应二进制操作.常见的操作有例如以下几种:以下我们具体说明,运算符的优先级看这里:java运算符的优先级是如何的 1.按位与 and两个二进制数进行按位与操作:同样位的两个数字都为1.则为1:若有一个不为1,则为0. 比如:00101

JavaScript中的移动位运算

因为技术知识太浅显,一次面试过程中面试官问了我一个这样的问题"1>>2=?" 之前属实一直没有碰到过,回来百度也没有太多东西,后面看高程知道这个叫做有符号右移运算,具体步骤是: (1)先把1转换成二进制数00000001: (2)然后右移两位,空位根据前面符号位补齐00000000: (3)即1>>2结果为0; 如果-1>>2=?, (1)相同先转换二进制11111111: (2)步骤二也是相同的,根据符号位补齐右移11111111: (3)因为是负