关于signed char 的范围为-128~127的推导

2024-05-15 11:08
文章标签 范围 char 推导 128 signed 127

本文主要是介绍关于signed char 的范围为-128~127的推导,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

对于char型数据,一般会分为无符号和有符号两种类型,这里说明一下这两者的范围问题

首先是无符号char,这个简单,

0000 0000 ~ 1111 1111    范围也就是0 ~ 255

那么对有符号char呢??

首先清楚一个东西,对于有符号数,最高位为符号位,0为正,1为负

那么按照跟上面一样的思路,范围为:

1111 1111 ~ 0111 1111  也就是-127 ~ 127

可是稍微对微型计算机那本书有认真看过的人都知道,正确范围是-128 ~ 127

这是上面情况~~~ 错了??

是的,就是错了~~

这里忘记了一个很重要的知识点:计算机中负数都是以补码的形式存储的

那么问题来了,为什么计算机中负数都是以补码的形式存储的呢????

其实简单回答就是为了方便cpu计算,简化电路设计,提高计算效率~~

举个例子:-15

二进制:1000 1111

反码:1111 0000

补码:1111 0001

在计算集中存储的就是1111 0001

再举几个例子:

数字             原码                 反码               补码

-1     1000 0001    1111 1110    1111 1111

-2     1000 0010    1111 1101    1111 1110

-3     1000 0011    1111 1100    1111 1101

...

-127    1111 1111    1000 0000    1000 0001

有没有发现规律呢?

发现补码依次递减的,那么-128在-127的基础上再减一,得到什么???

-128 1000 0000    1111 1111    1000 0000

可能你会觉得怎么凭空就多出个-128来了???

问得好!!!

我们把刚才这个表格网上列一点点看看

数字             原码                 反码               补码

+1 0000 0001    0000 0001    0000 0001

+00000 0000    0000 0000    0000 0000

-01000 0000    1111 1111    1000 0000

-1     1000 0001    1111 1110    1111 1111

-2     1000 0010    1111 1101    1111 1110

-3     1000 0011    1111 1100    1111 1101

...

-127    1111 1111    1000 0000    1000 0001

注意看红色部分~~

+0和-0!!!

有什么差别么?...其实没有什么差别。他们在计算时时等同的,但是为什么要有两个呢??

问题真多...

个人感觉这也许就是计算机使用二进制计算的那唯一的一点点小弊端吧~~~

不过前人也是很聪明,对比一下会发现,-128和-0的补码是相同的,也就是说用-128代替了-0

这样做的好处有两点:

1:消除了-0和+0这个地方的重复,节省了空间消耗

2:扩大了有符号char的表示范围-128~127  一共可以表示256,相比-127~127就可以多表示一个数字,何乐而不为呢~~~~

这篇关于关于signed char 的范围为-128~127的推导的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/991663

相关文章

uva 10014 Simple calculations(数学推导)

直接按照题意来推导最后的结果就行了。 开始的时候只做到了第一个推导,第二次没有继续下去。 代码: #include<stdio.h>int main(){int T, n, i;double a, aa, sum, temp, ans;scanf("%d", &T);while(T--){scanf("%d", &n);scanf("%lf", &first);scanf

Leetcode面试经典150题-128.最长连续序列-递归版本另解

之前写过一篇这个题的,但是可能代码比较复杂,这回来个简洁版的,这个是递归版本 可以看看之前的版本,两个版本面试用哪个都保过 解法都在代码里,不懂就留言或者私信 class Solution {/**对于之前的解法,我现在提供一共更优的解,但是这种可能会比较难懂一些(思想方面)代码其实是很简洁的,总体思想如下:不需要排序直接把所有数放入map,map的key是当前数字,value是当前数开始的

【无线通信发展史⑧】测量地球质量?重力加速度g的测量?如何推导单摆周期公式?地球半径R是怎么测量出来的?

前言:用这几个问答形式来解读下我这个系列的来龙去脉。如果大家觉得本篇文章不水的话希望帮忙点赞收藏加关注,你们的鼓舞是我继续更新的动力。 我为什么会写这个系列呢? 首先肯定是因为我本身就是一名从业通信者,想着更加了解自己专业的知识,所以更想着从头开始了解通信的来源以及在每一个时代的发展进程。 为什么会从头开始写通信? 我最早是学习了中华上下五千年,应该说朝代史,这个算个人兴趣,从夏

Oracle之用TO_CHAR函数将日期格式转化为不带前导零的月份和日

要求: 1、日期格式转化成字符串格式,月和日前面的0需要去掉,如日期2024-09-06需要转化成2024-9-6; 2、如果用截取拼接函数写法就会复杂,最好用TO_CHAR函数格式化实现。 正确写法: SELECT TO_CHAR(SYSDATE,'YYYY-fmMM-dd') AS DATE1 , -- 执行结果为 2024-9-6TO_CHAR(SYSDATE,'fmYYYY-MM-d

CF #278 (Div. 2) B.(暴力枚举+推导公式+数学构造)

B. Candy Boxes time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/488/problem/B There

HDU2524(规律推导)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2524 解题思路: 暴力推出矩阵,以n = 2 , m = 4为例: 1 3  6  10 3 9 18 30 可以发现第一行和第一列都是有规律的,彼此相差2、3、4·····,其他元素为相应行第一个元素乘以第一列元素的积。预处理之后,我们O(1)就可以输出g[n][m]的值。 另外,

Ural1209(数学推导)

题目链接:点击打开链接 解题思路: 此题甚好。推导公式,首先观察序列110100100010000·····,我们把为1的下标单独拿出来看。依次为1、2、4 、7、 11·····,可以分解为1+(0) 、1+(0+1)、1+(0+1+2)、1+(0+1+2+3)、1+(0+1+2+3+4),可以推导出规律1 + x * (x - 1) / 2。 那么对于每个n,我们只要判断是否存在x

过滤器:精密过滤器特点及应用范围概述

精密过滤器(又称作保安过滤器),筒体外壳一般采用不锈钢材质制造,内部采用PP熔喷、线烧、折叠、钛滤芯、活性炭滤芯等管状滤芯作为过滤元件,根据不同的过滤介质及设计工艺选择不同的过滤元件,以达到出水水质的要求。随着过滤行业的不断发展,越来越多的行业和企业运用到了精密过滤器,越来越多的企业加入了精密过滤器行业。   一、精密过滤器的性能特点及应用   1、精密过滤器的性能特点   (1)过滤精

Python中如何实现列表推导式(List Comprehension)

Python中的列表推导式(List Comprehension)是一种简洁且高效的方式来创建列表。它不仅让代码更加简洁,而且通常比使用循环和条件语句生成列表更快。列表推导式的基本形式允许你从现有的列表或其他可迭代对象中创建新的列表,同时应用过滤和转换操作。下面我将详细解释列表推导式的概念、基本语法、高级用法以及其在实际应用中的优势。 一、列表推导式的基本概念 列表推导式是Python中的一种

对极约束及其性质 —— 公式详细推导

Title: 对极约束及其性质 —— 公式详细推导 文章目录 前言1. 对极约束 (Epipolar Constraint)2. 坐标转换 (Coordinate Transformations)3. 像素坐标 (Pixel Coordinates)4. 像素坐标转换 (Transformations of Pixel Coordinates)5. 本质矩阵 (Essential Matr