二进制算法题
2022/1/9 11:05:10
本文主要是介绍二进制算法题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1、怎么判断一个存储在计算机中的二进制是正数还是负数
参考:https://jingyan.baidu.com/article/fedf0737b29e7535ad89775d.html
要清楚是以有符号进行存储还是无符号进行存储。
(1)、 如果是无符号存储,则其为一个正数。
(2)、若是有符号存储,则为补码存储。
(补码存储)需要看其最高位,最高位为0,为正数; 反之,为负数。
(3)、 如果仅仅是给了一堆二进制:比如10101010,那么它是没有正负概念的。
或者说10101010是原码或者补码,进而推断它的原始的值。
2、原码、反码、补码
参考:负数的二进制表示_storm_fury-CSDN博客_负数的二进制表示
计算机中存储数据都是以补码存储的
正数的原码、反码、补码一样
负数的补码为对该数的原码取反,然后在最后一位加1
(1)、原码:
一个正数的原码,是按照绝对值大小转换成的二进制数;
一个负数的原码,是按照绝对值大小转换成的二进制数,然后最高位补1。
比如 :
00000000 00000000 00000000 00000101是 5的 原码。
10000000 00000000 00000000 00000101是 -5的 原码。
(2)、反码:
正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反。
比如:
正数00000000 00000000 00000000 00000101的反码还是00000000 00000000 00000000 00000101
负数10000000 00000000 00000000 00000101每一位取反(除符号位),得11111111 11111111 11111111 11111010。
(3)、补码:
正数的补码与原码相同;
负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1.
比如:
10000000 00000000 00000000 00000101的反码是:11111111 11111111 11111111 11111010。
那么,补码为:
11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011
3、二进制的操作
与、或、异或、左移、右移
在不溢出的情况下
左移n位后的值 等于原值乘以2的n次方
例如 4 <<2 就是16,二进制就是 00000100 <<00010000
-4<<2 就是-16 二进制就是 11111100(负数在计算机中是以补码存在的) <<11110000,其中11110000是补码,想要知道它是多少需要先减一再取反(除符号位),减一是11101111,取反是10010000,所以是-16。
右移n位后的值 等于原值除以2的n次方的商
例如 4 >>2 就是1,二进制就是 00000100 >>00000001
-4>>2 就是-1 二进制就是 11111100 <<11111111,减一是11111110,取反是10000001,所以是-1。
4、编程题:
(1)、剑指offer面试题10:一个整数的二进制中1的个数:将整数的二进制表达的数每一位和1进行&运算,然后为例避免负数右移都是1的死循环情况,将1这个数字左移循环进行&运算。
(2)、剑指offer面试题40:数组中只出现一次的数字:
(3)、10进制转3进制:
这篇关于二进制算法题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?