基础篇-整型转换

源码反码与补码

要理解整形转换规则,先要明白整形在计算机中存储形式。

原码

先说最简单的无符号整数。
[0000 0001]原 = 1
[1000 0001]原 = 129
对有符号数来说最高位是符号位,0表示正数,1表示负数。
[0000 0001]原 = 1
[1000 0001]原 = -1
所以int8的最大值表示不了129,下面都以有符号数为例。

反码

正数的反码与原码相同,负数的反码与原码的关系是:符号位不变,其他各位按位取反。
无符号位都是正数,略过不讲,这里只说有符号位数。
[0000 0001]原 = [0000 0001]反 = 1
[1000 0001]原 = [1111 1110]反 = -1
人脑需要把反码转换为对应的原码,才能计算出它实际的值。

补码

正数的补码与原码和反码都相同,负数的补码等于其反码加1
[0000 0001]原 = [0000 0001]反 = [0000 0001]补 = 1
[1000 0001]原 = [1111 1110]反 = [1111 1111]补 = -1
补码同样对人脑不友好,需要转换到对应的原码,才能计算出实际值。

引入补码的原因

补码对人并不直观,引入补码的原因是为了简化计算。加法作为最基础的运算,设计的越简单越好。引入补码后,符号位可以直接参与运算,不用额外记忆,可以把减法转换为减法。
以-1-1为例,-1-1 = -1 + (-1)
[1000 0001]原 + [1000 0001]原 = [1111 1111]补 + [1111 1111]补 = [1 1111 1110]补 = [1 0000 0010]原 = -2

整形转换

由小字节整型向大字节整型转换很直观,说下大范围的整型向小范围整型转换的情况
-129 = [1 1000 0001]原 = [1 0111 1110]反 = [1 0111 1111]补
将-129转为int8,值能保留8位,舍去最高的符号位,剩下的是[0111 1111]为正数,补码与原码相同,值为127

原文地址:https://www.cnblogs.com/progyoung/p/11674543.html

时间: 2024-10-09 23:42:54

基础篇-整型转换的相关文章

python基础一整型、bool、字符串

1整型.bool.字符串 1.整型 --数字(int) ? 用于比较运算的 ? 32位 -2 ** 31 ~ 2 ** 31 -1 ? 64位 -2 ** 63 ~ 2 ** 63 -1 ? 基础运算符:+ - * / // ** % python2 整型 int -- log(长整型) / 获取的是整数 python3 整型 int -- / 获取的是浮点数(小数) 2.进制 ? 二进制 八进制 十进制 十六进制 ? 十进制与二进制转换: ? 十进制->二进制:除二整除取倒余法 ? 二进制->

[日常] Go语言圣经--作用域,基础数据类型,整型

go语言圣经-作用域 1.一个声明语句将程序中的实体和一个名字关联,比如一个函数或一个变量 2.一个变量的生命周期是指程序运行时变量存在的有效时间段;声明语句的作用域对应的是一个源代码的文本区域,它是一个编译时的属性 3.句法块是由花括弧所包含;我们可以把块(block)的概念推广到包括其他声明的群组,这些声明在代码中并未显式地使用花括号包裹起来,我们称之为词法块. 4.全局作用域 包级语法域 源文件级的作用域 局部作用域 函数级的作用域 5.从最内层的词法域向全局的作用域查找.内部的会覆盖外部

有关包装类拆箱、装箱和整型与字符串型之间的转换

原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/5462489.html 1.8种基本数据类型都有各自的包装类,其对应关系为: 基本————————————包装类 byte————————————Byte short———————————Short char————————————Char int————————————Integer long————————————Long float————————————Float double———

php IP string与整型互换

PHP中有内置函数ip2long可以将ip地址转换整型. 使用long2ip把整型转换回ip地址 例子: $ip = '58.6.207.207'; $ip_int = ip2long($ip); echo $ip."<br />"; echo $ip_int."<br />"; echo long2ip($ip_int); 转换原理:第一.第一段乘以256的三次方,第二段乘以256的平方,第三段乘以256.最后总和 $array[0]*25

【转】浮点型转换整型的快速方法介绍

原文网址:http://blog.csdn.net/leakers_zzw/article/details/8005762 [注明] 现有的Intel中的SSE指令 cvtps2dq XMM,XMM/m128 支持把源存储器4个单精度浮点数变成4个双字有符号整数,结果送入目的寄存器,内存变量必须对齐内存16字节,另外还有其他指令支持双精度和整型的转换. 转载本文,作为C算法设计的探讨. 在计算机图形运算中,常常要将浮点数转换为整数,例如在图像的光栅化阶段,就要执行大量的类型转换,以便将浮点数表示

渗透学习笔记--基础篇--sql注入(数字型)

环境:dvwa 1.7数据库:mysql dvwa的安全等级:medium 一.分析和查找注入点(1)知识点回顾如果上一篇有好好读过的同学应该知道,我们上一篇遇到的字符型注入.也即是通过Get或者Post方式传进去的数据被单引号或者双引号包裹住.如果我们想要注入自己的payload(有效载荷)的话,则我们必须先闭合前面的单引号或者双引号,否则我们的数据始终会被当做成字符串来处理. 这种类型的注入点称为字符型注入点. (2)这次我们的把防御等级提升了一个层次,来逐步加强我们手工注入的能力以及开更多

第二十一篇 Java 数据类型的定义 ,以及基础类型的自动转换和强制转换

大家好,今天呢我吧我所学到的一些知识点共享给大家,希望大家看完之后,要是有什么不懂的,请随时联系我,要是觉得我写的不是很好的 ,还希望你们能够谅解一下,因为小弟我刚学会写博客也没多久,很多格式和方法都不是很完善,希望大家多多包涵,好了 废话就不多说了,来谈一下今天我所学到的一些知识点吧: 今天我主要是学到了一些Java中的数据类型,其中,Java中的数据类型分为俩类------基础数据类和逻辑数据类,下面我所介绍的都是基本数据类的一些分类,至于逻辑类,由于使用次数过少,所以今天就不再这里多做介绍

Scalaz(1)- 基础篇:隐式转换解析策略-Implicit resolution

在正式进入scalaz讨论前我们需要理顺一些基础的scalaz结构组成概念和技巧.scalaz是由即兴多态(ad-hoc polymorphism)类型(typeclass)组成.scalaz typeclass在scala中的应用有赖于scala compiler的一项特别功能:隐式转换(implicit conversion),使程序表述更精简.由于隐式转换是一项compiler功能,在程序编译(compile)的时候是由compiler来进行类型转换代码的产生和替代的. 让我们先了解一下作

C语言---整型字符串转换

C语言提供了几个标准库函数,能够将随意类型(整型.长整型.浮点型等)的数字转换为字符串.下面是用itoa()函数将整数转 换为字符串的一个样例: # include <stdio.h>    # include <stdlib.h> void main (void)    {    int num = 100;    char str[25];    itoa(num, str, 10);    printf("The number ’num’ is %d and the