发布作者: 偷得浮生半日闲
百度收录: 正在检测是否收录...
作品采用: 《 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 》许可协议授权
可以用按位与判断一个数是否是奇数或偶数
例子
3 & 2
3的补码:00000000 00000000 00000000 00000011
2的补码:00000000 00000000 00000000 00000010
结果的补码:00000000 00000000 00000000 00000010
十进制结果:2
-3 & 4
-3的原码: 10000000 00000000 00000000 00000011
-3的反码: 11111111 11111111 11111111 11111100
-3的补码: 11111111 11111111 11111111 11111101
4的补码: 00000000 00000000 00000000 00000100
结果的补码:00000000 00000000 00000000 00000100
十进制结果:4
-3 & -4
-4的原码: 10000000 00000000 00000000 00000100
-4的反码: 11111111 11111111 11111111 11111011
-4的补码: 11111111 11111111 11111111 11111100
-3的补码: 11111111 11111111 11111111 11111101
结果的补码:11111111 11111111 11111111 11111100
结果的反码:11111111 11111111 11111111 11111011
结果的原码:10000000 00000000 00000000 00000100
十进制结果:-4
按位与的优先级比判断运算符低(==、>、<、…),所以如果需要做判断时应该用括号将算式括起来以改变运算顺序,如:(num & 1) == 0
例子
3 | 2
3的补码: 00000000 00000000 00000000 00000011
2的补码: 00000000 00000000 00000000 00000010
结果的补码:00000000 00000000 00000000 00000011
十进制结果:3
-3 & 4
-3的原码: 10000000 00000000 00000000 00000011
-3的反码: 11111111 11111111 11111111 11111100
-3的补码: 11111111 11111111 11111111 11111101
4的补码: 00000000 00000000 00000000 00000100
结果的补码:11111111 11111111 11111111 11111101
结果的反码:11111111 11111111 11111111 11111100
结果的原码:10000000 00000000 00000000 00000011
十进制结果:-3
-3 & -4
-4的原码: 10000000 00000000 00000000 00000100
-4的反码: 11111111 11111111 11111111 11111011
-4的补码: 11111111 11111111 11111111 11111100
-3的补码: 11111111 11111111 11111111 11111101
结果的补码:11111111 11111111 11111111 11111101
结果的反码:11111111 11111111 11111111 11111100
结果的原码:10000000 00000000 00000000 00000011
十进制结果:-3
例子
~3
3的补码:00000000 00000000 00000000 00000011
结果的补码:11111111 11111111 11111111 11111100
结果的反码:11111111 11111111 11111111 11111011
结果的原码:10000000 00000000 00000000 00000100
十进制结果:-4
例子
a = a ^ b = 3 ^ 2
3的补码: 00000000 00000000 00000000 00000011
2的补码: 00000000 00000000 00000000 00000010
结果的补码:00000000 00000000 00000000 00000001
十进制结果:a = 1
b = a ^ b = 1 ^ 2
1的补码: 00000000 00000000 00000000 00000001
2的补码: 00000000 00000000 00000000 00000010
结果的补码:00000000 00000000 00000000 00000011
十进制结果:b = 3
a = a ^ b = 1 ^ 3
1的补码: 00000000 00000000 00000000 00000001
3的补码: 00000000 00000000 00000000 00000011
结果的补码:00000000 00000000 00000000 00000010
十进制结果:a = 2
a << b
3 << 2
3的补码:00000000 00000000 00000000 00000011
运算:00000000 00000000 00000000 0000001100
结果的补码:00000000 00000000 00000000 00001100
十进制结果:12
相当于:3 2^2 = 3 4 = 12
a >> b
例子
3 >> 2
3的补码: 00000000 00000000 00000000 00000011
运算: 0000000000 00000000 00000000 00000011
结果的补码:00000000 00000000 00000000 00000000
十进制结果:0
相当于:3 / 2^2 = 3 / 4 = 0
-3 >> 4
-3的补码: 11111111 11111111 11111111 11111101
运算: 111111111111 11111111 11111111 11111101
结果的补码:11111111 11111111 11111111 11111111
结果的反码:11111111 11111111 11111111 11111110
结果的原码:10000000 00000000 00000000 00000001
十进制结果:-1
相当于:???
栈
用来存储局部变量,所有的局部变量全部都声明在栈区域中
堆
允许程序员手动申请堆中的空间进行使用
BSS段
用来存储未初始化的全局变量与静态变量
数据段(常量区)
用来存储已初始化的全局变量与静态变量以及常量数据
代码段
用来存储程序的代码/指令
原理:
将字符串数据的每1个字符存储到字符数组中,并在后面追加1个“\0”代表字符串存储完毕
最根本的存储方法:
char name[5] = {‘j’, ‘a’, ‘c’, ‘k’, ‘\0’};
将字符串的每一个字符存储到字符数组中,在后面追加一个“\0”代表存储结束
简写方式:
char name[] = {“jack”};
系统自动的会将这个字符串中的每一个字符存储到字符数组中,并自动追加一个“\0”
最常用的方式:
char name[] = “jack”;
等同于简写的方式
使用%s来输出字符串变量,其原理是:
从给定的数组的地址开始,逐个字节的读取并显示,直到遇到“\0”字节,结束。
scanf( )函数
注意
不可用sizeof去计算字符数组的长度来得到字符串的长度,因为有可能字符串数据存储在字符数组中只占了一部分,正确的计算方式为:
从第一个字节开始计数,直到遇到“\0”结束。
puts( )函数
gets( )函数
fputs( )函数
文件流 —> 磁盘上的文件
操作模式:
fgets( )函数
3.指定的流
fgets:安全,空格也会接受
文件流 —> 磁盘上的文件
strlen( )函数
strcmp()函数
如果返回的是0,说明一样
strcpy( )函数
strcat()函数
char *name = “jack";
char name1[] = "jack";
char *name2 = “jack”;
当他们作为局部变量时:
当他们作为全局变量时:
区别:
以字符指针存储时:无论如何首先都有1个指针变量,字符串数据是以字符数组的形式存储在常量区
char *names[] = {“jack”,”rose”};
每1个字符串的长度没有限制,而二维数组存储字符串数组时,每1个字符串的长度不能超过二维数组的列数-1
将字符串数组当中的字符串以字母的形式排序
—— 评论区 ——