Int 型数值存储
1. Int 在计算机中占 4 Byte, 共 32 位, 最大正数为 2147483647, 最小负数为 -2147483648
2. 正数存储在计算机中的形式为原码,最大正数的十六进制形式为 0X7FFFFFFF. 第一位为7, 二进制位 0111, 最高位为符号位, 所以正数的最高位为0
3. 负数在计算机的存储形式为补码, 最小负数为0XFFFFFFFF, 第一位是F, 二进制为 1111, 负数的最高位是1
4. 大学时变反加一背的滚瓜烂熟, -x 可以通过 x 的二进制取反加一最高位置 1 获得
5. 溢出. 0X7FFFFFFF + 1 == 0X80000000, 由最大正数变成最小负数 
Leetcode StringToInteger
主要考察溢出处理, 我在处理溢出时用了很多的判断语句, 写的甚是不雅
int atoi(const char *str) {
if(!strlen(str)) return ;
bool neg = false;
int cur = ;
int res = , num=;
while(str[cur] == ' ')
cur++;
if(str[cur]=='-') {
neg = true;
cur++;
}
else if(str[cur]=='+') {
cur++;
}else{}
while(isNum(str[cur], num)) {
if( MAXN/ > res) {
res = res * + num;
}else if( MAXN/ == res) {
if(neg) {
if(num >=)
return MINN;
else
res = res * + num;
}else{
if(num>=)
return MAXN;
else
res = res * + num;
}
}else{
if(neg)
return MINN;
else
return MAXN;
}
cur++;
}
if(neg)
return (-)*res;
else
return res;
}
LeetCode SingleNumberII
1. 先假设所求是正数, 将二进制看出正数的原码表示
2. 假如最高位是 1, 说明所求数字实际为负数, 那么我们对 res 减一变反, 得到所求数字的绝对值再乘以 -1 即可
3. 注意, 对二进制进行操作和对十进制操作是等价的, 在这个地方想了很久. 因为变量 res 实际上只是以十进制的形式存下了二进制的数据, 当所求数字为正数时, 万事大吉, res 即为所求. 当所求为负数时, 那么 res 是没有意义的, 只是简单的用十进制形式存了某个二进制的数, 我们对其进行位操作, 减一, 求反. 得到其绝对值都相当于直接对二进制进行操作
4. 细节. 对二进制求反可以直接异或 0X11111111
for(int i = ; i >= ; i --) {
res = res* + (record[i]%);
}
// 负数, 按位取反, 末尾加一的逆过程
if( record[] % ) {
res = (res - )^(0x7FFFFFFF);
res = - * res;
}
Int 型数值存储的更多相关文章
- 将int型数值拆分成4字节
- int型整数的数值范围
假设int型用两个字节表示对于有符号的整数,用补码表示的话,最高位是符号位,后面15位用来表示数据.1.正数,表示的范围为0000 0000 0000 0001-0111 1111 1111 1111 ...
- 将int,bigint整型数值可逆转换字符串
将 Int 和 BigInt 类型数值转换为字符串的可逆方法,可用于缩短网址或记录的ID转换等. 如: 9223372036854775807 => aZl8N0y58M7 class Conv ...
- 求int型正整数在内存中存储时1的个数
题目描述: 输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数. 输入描述: 输入一个整数(int类型) 输出描述: 这个数转换成2进制后,输出1的个数 输入例子: 5 输出例子: ...
- 华为oj之求int型正整数在内存中存储时1的个数
题目: 求int型正整数在内存中存储时1的个数 热度指数:4427 时间限制:1秒 空间限制:32768K 题目描述 输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数. 输入描述: ...
- 牛客网编程练习(华为机试在线训练)-----求int型正整数在内存中存储时1的个数
题目描述 输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数. 输入描述: 输入一个整数(int类型) 输出描述: 这个数转换成2进制后,输出1的个数 示例1 输入 5 输出 2 P ...
- java笔试之求int型正整数在内存中存储时1的个数
输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数. 关键点:n与二进制的1相与:判断最末位是否为1:向右移位. 类似题目是查找输入整数二进制中1的个数. package test; ...
- 求int型正整数在内存中存储时1的个数 && int型的数到底最大是多少?
输入一个int型的正整数(十位数之内!嘞!),计算出该int型数据在内存中存储时1的个数. #include<bits/stdc++.h> using namespace std; int ...
- Docs-.NET-C#-指南-语言参考-关键字-内置类型-值类型:整型数值类型
ylbtech-Docs-.NET-C#-指南-语言参考-关键字-内置类型-值类型:整型数值类型 1.返回顶部 1. 整型数值类型(C# 参考) 2019/10/22 “整型数值类型”是“简单类型”的 ...
随机推荐
- codeBlocks编译undefined reference to错误
是没有把c文件编译进去的原因. 右键项目,选择属性,弹出窗体 然后选择build targets 在最下面有个build target files:中把c文件勾选.点击ok重新编译即可. Code:: ...
- Linux下crontab内环境变量与Shell环境变量的关系【转】
crontab,总是不会缺省的从用户profile文件中读取环境变量参数 经常导致在手工执行某个脚本时是成功的,但是到crontab中试图执行时就会报错. 解决办法如下: 方法一:在shell文件中获 ...
- LeetCode: Maximal Rectangle 解题报告
Maximal RectangleGiven a 2D binary matrix filled with 0's and 1's, find the largest rectangle contai ...
- python 字符串 大小写转换 以及一系列字符串操作技巧
总结 capitalize() 首字母大写,其余全部小写 upper() 全转换成大写 lower() 全转换成小写 title() 标题首字大写,如"i love python" ...
- java 多线程5: java 终止线程及中断机制 (stop()、interrupt() 、interrupted()、isInterrupted())
JAVA中有3种方式可以终止正在运行的线程 ①线程正常退出,即run()方法执行完毕了 ②使用Thread类中的stop()方法强行终止线程.但stop()方法已经过期了,不推荐使用 ③使用中断机制i ...
- 百度地图 JSAPI使用 定位当前地址 与路径规划
http://lbsyun.baidu.com/index.php?title=jspopular api http://developer.baidu.com/map/jsdemo.htm#a1 ...
- R 画structure图
id percent k1_B04_WL-1.fs_1 0.021 k31_B04_WL-1.fs_1 0.624 k21_B04_WL-1.fs_1 0.355 k1 K=3 数据输 ...
- 简单5步,释放Mac磁盘空间
收藏一下,以备后用 http://ourmacs.com/mactech/340
- [mmc]设备树节点含义
&mmc3 { status = "okay"; dmas = <&edma &edma >; dma-names = "tx&quo ...
- strerror() 和perror()函数
在linux编程中,strerror()是个好东东,因为一个孤零零的errno看不出个所以然,然而strerror()返回的错误描述已经给我们解决问题提供了80%的成功率.但从安全性的角度来讲,str ...