乐于分享
好东西不私藏

老电脑的无线网卡搜不到WiFi怎么办?

老电脑的无线网卡搜不到WiFi怎么办?

楔子

大家好,我是张桃狮。

我在单位办公用的电脑是DELL Vostro小主机,通过网线连接到公司的局域网使用。

最近我换了一个办公工位,新工位电脑连接网线不太方便,不过我发现这台小主机是有无线网卡的,就打算通过wifi上网。

结果我发现搜不到wifi信号。

确切的说是搜不到公司的wifi信号,其他不相干的wifi信号倒是搜到一堆。

这就很奇怪了。

公司局域网的路由器是不久前新买的,支持5G WiFi和2.4G WiFi,在我的手机上可以看到这两个wifi信号,不可能出现隐藏SSID的情况。

打开设备管理器,我看到小主机的无线网卡型号是Qualcomm QCA9565 802.11b/g/n Wireless Adapter。

上网查了一下,这个无线网卡是支持2.4G WiFi的。

这个无线网卡虽然老了点,不支持5G WiFi,但是为什么2.4G WiFi也搜不到呢?

下面是解决方法。

打开WIN10右下角的WLAN界面,拖动wifi信号名称右边的进度条到底,可以看到隐藏的网络。

点击隐藏的网络,输入SSID(就是手机上可以看的wifi信号名称),再输入密码就可以访问了。

注意我输入的是2.4G WiFi的名称,这个无线网卡只支持2.4G WiFi。

问题解决了,但是为什么会这样?我还没有搞明白。

咱们闲话讲完,继续力扣刷题学编程。

我刷题不是为了面试或者参加竞赛,只是为了熟悉python语法,所以我做的都是标记为easy的题目。

感兴趣的,可以关注我,大家一起学习。

力扣231. 2 的幂

给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。

如果存在一个整数 x 使得 n ==  ,则认为 n 是 2 的幂次方。

示例 1:

输入:n = 1

输出:true

解释:20 = 1

示例 2:

输入:n = 16

输出:true

解释:24 = 16

示例 3:

输入:n = 3

输出:false

提示:

- <= n <=  - 1

进阶:你能够不使用循环/递归解决此问题吗?

我的思路

先用循环做一版,再挑战用位运算。

循环

class Solution:    def isPowerOfTwo(self, n: int) -> bool:        for x in range(31):            if n==2**x:                return True        return False

根据提示,这里循环到就可以出结果了。

力扣提交通过,时间复杂度O(1)(循环次数是固定常数 31,与输入 n 无关),空间复杂度O(1)。

豆包给了一个优化后的代码

class Solution:    def isPowerOfTwo(self, n: int) -> bool:        if n <= 0:  # 提前过滤无效值            return False        for x in range(31):            if n == (1 << x):  # 位运算替代 2^x,更高效                return True        return False

位运算1 << x替代 2^x,我真没想到还能这么计算。

都怪十进制给我打上了思想钢印,我的大脑需要用二进制重新格式化:)

位运算

class Solution:    def isPowerOfTwo(self, n: int) -> bool:        if n<=0:            return False        if n&(n-1)==0:            return True        else:            return False

力扣提交通过,时间复杂度和空间复杂度都是O(1)。

判断一个数 x 是不是 2 的幂,需要满足:

x & (x - 1) == 0

并且x > 0

举个例子,x=2,二进制为010,减1后为001。

010 & 001 ==0

这里拿3位二进制数举例,实际上python支持的二进制位数是没有限制的。

力扣官方题解

方法一:二进制表示

class Solution:    def isPowerOfTwo(self, n: int) -> bool:        return n > 0 and (n & (n - 1)) == 0

这个跟我的代码差不多,不过官方题解只用了一行代码。

力扣提交通过,时间复杂度和空间复杂度都是O(1)。

class Solution:    def isPowerOfTwo(self, n: int) -> bool:        return n > 0 and (n & -n) == n

举个例子,n=2,二进制为010,-n的计算方法是对二进制n取反(~)在加1。

~n+1==101+1

101+1==110

010 & 110 == 010

这里拿3位二进制数举例,实际上python支持的二进制位数是没有限制的。

如果想要验证一下,可以打开WIN10自带的cmd,输入python回车。

输入0b10&-0b10回车,结果是2。

注意这里输入的是二进制数字,python默认输出的十进制数字。

力扣提交通过,时间复杂度和空间复杂度都是O(1)。

方法二:判断是否为最大 2 的幂的约数

class Solution:    BIG = 2**30    def isPowerOfTwo(self, n: int) -> bool:        return n > 0 and Solution.BIG % n == 0

代码利用了更大的 2 的幂能被所有更小的 2 的幂整除的特性,只需要计算一次除法就可以得出结果。

力扣提交通过,时间复杂度和空间复杂度都是O(1)。

尾声

最后说一下为什么二进制求负数要先取反,再加1。

还是用3位二进制数010举例,取反后为101,+1后为110。

010+110==1000

由于系统设定为3位二进制数,左侧超出部分会舍弃,最后的结果是000,正好符合2+-2=0的十进制计算法则。

二进制位运算虽然看起来有点反人类,却是计算机的硬件基础原理。

它的历史要比现在所有的编程语言都要古老。

理论根源最早可以追溯到1847年布尔代数,工程实现则来自计算机硬件的老祖宗香农21岁时的一篇论文《继电器与开关电路的符号分析》。

小说《三体》中的秦始皇人力计算机就是对二进制逻辑门与位运算的模拟。

刘慈欣作为计算机工程师,理论功底还是很扎实的。

可惜我第一次看的时候,没看懂:(

我是个编程爱好者,小白级别的,如果你跟我一样希望通过力扣刷题,学习各种奇妙的算法,可以关注我,大家一起学习。