![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言杂项
文章平均质量分 62
随心uj
。
展开
-
C语言小惑
1. C语言小惑1. 操作符-按位取反(~)问题:为什么打印出-1?解答:在32位操作系统里面,整数存放的位数为32位整数a=00000000000000000000000000000000011111111111111111111111111111111 ~a一个整数的二进制的表示有3种,分别为原码、反码、补码。而整数在内存中存储的是补码。-1:原码:1,0000000000000000000000000000001(第一位为符号位,1表示负数)先将原码转换成反码原创 2021-09-19 15:39:11 · 90 阅读 · 0 评论 -
使用宏实现一个整数奇数为和偶数位的交换
思路:将二进制位与10101010 10101010 10101010 10101010按位与(即与0xaaaaaaaa按位与)可保留原数据的奇数位,将二进制位与01010101 01010101 01010101 01010101按位与(即0x55555555)可保留原数据的偶数位,然后将保留奇数位的数右移一位可变为偶数位,将保留偶数位的数左移一位可变为奇数位,最后相加,即可得到奇数位与偶数位想交换的数。代码:#include <stdio.h>#define SWAP_BIT(n原创 2021-10-30 15:50:34 · 173 阅读 · 0 评论 -
找单身狗 异或
题目一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。编写一个函数找出这两个只出现一次的数字。介绍异或异或是位运算符,针对的是二进制位,两个相同的数异或为0,相异的为1。如 1 ^ 1 = 0; 1 ^ 0 = 1;异或还有几个特性:任何值跟0异或都等于它本身,如 5 ^ 0 = 5;相同的数异或为0,如 5 ^ 5 = 0;思路题目中说“其他所有数字都出现两次”可知,我们可以使用异或来消除出现两次的数字,剩下的就是两个出现次数为1次的异或。如 数组[1,1原创 2021-10-30 15:05:25 · 186 阅读 · 0 评论