首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    二进制加,减法,23个位运算技巧[通俗易懂]

    二进制最高位为1时表示负数,为0时表示正数。 **原码:**一个正数,转换为二进制位就是这个正数的原码。负数的绝对值转换成二进制位然后在高位补1就是这个负数的原码。 举例说明:       int类型的 3 的原码是 11B(B表示二进制位), 在32位机器上占四个字节,那么高位补零就得:       00000000 00000000 00000000 00000011       int类型的 -3 的绝对值的二进制位就是上面的 11B 展开后高位补零就得:       10000000 00000000 00000000 00000011 **反码:**正数的反码就是原码,负数的反码等于原码除符号位以外所有的位取反。 举例说明:       int类型的 3 的反码是       00000000 00000000 00000000 00000011       和原码一样没什么可说的       int类型的 -3 的反码是       11111111 11111111 11111111 11111100       除开符号位 所有位 取反 **补码:**正数的补码与原码相同,负数的补码为 其原码除符号位外所有位取反(得到反码了),然后最低位加1. 还是举例说明:       int类型的 3 的补码是:       00000000 00000000 00000000 00000011       int类型的 -3 的补码是       11111111 11111111 1111111 11111101       就是其反码加1

    03

    第十四届蓝桥杯集训——练习解题阶段(无序阶段)-基础练习 Fibonacci数列

    最近的一些文章都可能会很碎,写到哪里是哪里,过一阵子会具体的整理一遍,这里其它的类型题先往后排一排,因为蓝桥最后考的也就是对题目逻辑的理解能力,也就是dp分析能力了,所以就主要目标定在这里,最近的题目会很散,很多,基本上都是网罗全网的一些dp练习题进行二次训练,准备比赛的学生底子薄的先不建议看啊,当然,脑子快的例外,可以直接跳过之前的一切直接来看即可,只需要你在高中的时候数学成绩还可以那就没啥问题,其实,dp就是规律总结,我们只需要推导出对应题目的数学规律就可以直接操作,可能是一维数组,也可能是二维数组,总体来看二维数组的较多,但是如果能降为的话建议降为,因为如果降为起来你看看时间复杂度就知道咋回事了,那么在这里祝大家能无序的各种看明白,争取能帮助到大家。

    02

    【C语言】char 关键字

    ④ char  ⇿ 字符型 ⒈描述 ⇨ char 字符型变量是用来存储字符常量的变量,字符型变量在内存空间所占字节大小为1个字节,%c 所对应的是打印字符的格式数据,有符号(signed)的char取值范围是『 (负)128 ~ 127』无符号字符unsigned char的取值范围是『0~255』 ⒉作用 ⇨ 定义一个字符型变量的方法是使用关键字 char,例如: char str = 'A'; ⒊注意 ⇨ 字符数据在内存中存储的是字符的 ASCll 码,即使是一个无符号整数,其形式与整数的存储形式一样,因为在C语言的字符型数据与整形数据之间通用。 ⒋实际上字符型是被称之为整形字符类型('单引号')如果不相信的话,你可以用sizeof关键字求下单引号字面值、常量看下它所在的字节大小是不是一个整形(④字节)的。 ⒌拓展知识点 ⇨ 相信学习过C++语言的小伙伴应该知道在C++语言当中它还是一个字节的。

    01

    疯子的算法总结(一) 位运算(快速幂、快速乘)

    计算机通过二进制表示整形数,比如int型32位有符号整形数: 1表示为:0000…00001(共32位) -1表示为:1111…1111(共32位) 补码计算法定义:非负数的补码是其原码本身; 负数的补码是其绝对值的原码最高位符号位不变,其它位取反,再加1。 表示原因:计算机逻辑运算没有减法,-1+1最高为溢出,剩余0000000000(32位)即为0; 则有a-b=a+b的(补码); 计算方式: -1表示原码为100…0001(32位),最高位位符号位。 -1的反码表示为:1111…110(32位),除符号位按位取反。 -1的补码表示为:1111…1111(32位),反码+1。 正数的补码为自己本身。 例子: 100的补码‭00000000000000000001100100‬ -30的补码 11111111111111111111111100010‬ 100+(-30)=000000000000000000‭01000110‬ 转换成10进制为70;

    03

    25行代码实现完整的RSA算法

    python3.X版本的请点击这里25行代码实现完整的RSA算法   网络上很多关于RSA算法的原理介绍,但是翻来翻去就是没有一个靠谱、让人信服的算法代码实现,即使有代码介绍,也都是直接调用JDK或者Python代码包中的API实现,也有可能并没有把核心放在原理的实现上,而是字符串转数字啦、或者数字转字符串啦、或者即使有代码也都写得特别烂。无形中让人感觉RSA加密算法竟然这么高深,然后就看不下去了。看到了这样的代码我就特别生气,四个字:误人子弟。还有我发现对于“大整数的幂次乘方取模”竟然采用直接计算的幂次的值,再取模,类似于(2 ^ 1024) ^ (2 ^ 1024),这样的计算就直接去计算了,我不知道各位博主有没有运行他们的代码???知道这个数字有多大吗?这么说吧,把全宇宙中的物质都做成硬盘都放不下,更何况你的512M内存的电脑。所以我说他们的代码只可远观而不可亵玩已。   于是我用了2天时间,没有去参考网上的代码重新开始把RSA算法的代码完全实现了一遍以后发现代码竟然这么少,基本上25行就全部搞定。为了方便整数的计算,我使用了Python语言。为什么用Python?因为Python在数值计算上比较直观,即使没有学习过python的人,也能一眼就看懂了代码。而Java语言需要用到BigInteger类,数值的计算都是用方法调用,所以使用起来比较麻烦。如果有同学对我得代码感兴趣的话,先二话不说,不管3X7=22,把代码粘贴进pydev中运行一遍,是驴是马拉出来溜溜。看不懂可以私信我,我就把代码具体讲讲,如果本文章没有人感兴趣,我就不做讲解了。 RSA算法的步骤主要有以下几个步骤:     1、选择 p、q两个超级大的质数 ,都是1024位,显得咱们的程序货真价实。     2、令n = p * q。取 φ(n) =(p-1) * (q-1)。 计算与n互质的整数的个数。     3、取 e ∈ 1 < e < φ(n) ,( n , e )作为公钥对,正式环境中取65537。可以打开任意一个被认证过的https证书,都可以看到。     4、令 ed mod φ(n) = 1,计算d,( n , d ) 作为私钥对。 计算d可以利用扩展欧几里的算法进行计算,非常简单,不超过5行代码就搞定。     5、销毁 p、q。密文 = 明文 ^ e mod n , 明文 = 密文 ^ d mod n。利用蒙哥马利方法进行计算,也叫反复平方法,非常简单,不超过10行代码搞定。     实测:秘钥长度在2048位的时候,我的thinkpad笔记本T440上面、python2.7环境的运行时间是0.035秒,1024位的时候是0.008秒。说明了RSA加密算法的算法复杂度应该是O(N^2),其中n是秘钥长度。不知道能不能优化到O(NlogN)   代码主要涉及到三个Python可执行文件:计算最大公约数、大整数幂取模算法、公钥私钥生成及加解密。这三个文件构成了RSA算法的核心。   这个时候很多同学就不干了,说为什么我在网上看到的很多RSA理论都特别多,都分很多个章节,在每个章节中,都有好多个屏幕才能显示完,这么多的理论,想想怎么也得上千行代码才能实现,怎么到了你这里25行就搞定了呢?北门大官人你不会是在糊弄我们把?其实真的没有,我是良心博主,绝对不会糊弄大家,你们看到的理论确实这么多,我也都看过了,我把这些理论用了zip,gzip,hafuman,tar,rar等很多的压缩算法一遍遍地进行压缩,才有了这个微缩版的rsa代码实现,代码虽少,五脏俱全,是你居家旅行,课程设计、忽悠小白、必备良药。其实里边的几乎每一行代码都能写一篇博客专门进行介绍。   前方高能,我要开始装逼了。看不懂的童鞋请绕道,先去看看理论,具体内容如下:   1. 计算最大公约数   2. 超大整数的超大整数次幂取超大整数模算法(好拗口,哈哈,不拗口一点就显示不出这个算法的超级牛逼之处)   3. 公钥私钥生成

    02
    领券