C语言 操作符详解
C语言学习
目录
文章目录
前言
一、算术操作符
二、移位操作符
2.1 左移操作符
2.2 右移操作符
三、位操作符
3.1 按位与操作符 &
3.2 按位或操作符 |
3.3 按位异或操作符 ^
四、赋值操作符
五、单目操作符
5.1 逻辑反操作符!
5.2 正值+、负值-操作符
5.3 取地址操作符&
5.4 计算操作数的类型长度sizeof
5.5 按位取反操作符 ~
5.6 ++和--操作符
5.7 解引用操作符 *
5.8 强制类型转换操作符()
5.9 sizeof和数组
六、关系操作符
总结
前言
本文介绍C语言操作符,有以下内容:算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符。
一、算术操作符
+ - * / %
1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。
2. / 操作符:如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
- 整型的除法:
代码示例:
#include <stdio.h>int main()
{int a = 1 / 2;printf("a=%d\n", a);return 0;
}
运行结果:
a=0
- 浮点型的除法:
代码示例1:
#include <stdio.h>int main()
{double b = 1.0 / 2;printf("b=%f\n", b);return 0;
}
运行结果:
b=0.500000
代码示例2:
#include <stdio.h>int main()
{double b = 1 / 2.0;printf("b=%f\n", b);return 0;
}
运行结果:
b=0.500000
3. % 操作符计算的是整除后的余数,% 操作符的两个操作数必须为整数。
代码示例:
#include <stdio.h>int main()
{int c = 7 % 2;printf("c=%d\n", c);return 0;
}
运行结果:
c=1
二、移位操作符
- << 左移操作符
- >> 右移操作符
注:移位操作符的操作数只能是整数。
移位操作符移动的是二进制位。
整数的二进制表示有3种:
- 原码
- 反码
- 补码
正的整数的原码、反码、补码相同。
负的整数的原码、反码、补码是要计算的。
- 由负整数原码计算出反码:原码的符号位不变,其他位按位取反。
- 由负整数反码计算出补码:反码+1。
示例:
7的原码、反码、补码:
- 原码:0000 0000 0000 0000 0000 0000 0000 0111
- 反码:0000 0000 0000 0000 0000 0000 0000 0111
- 补码:0000 0000 0000 0000 0000 0000 0000 0111
-7的原码、反码、补码:
- 原码:1000 0000 0000 0000 0000 0000 0000 0111
- 反码:1111 1111 1111 1111 1111 1111 1111 1000 符号位不变,其他位按位取反
- 补码:1111 1111 1111 1111 1111 1111 1111 1001 反码+1
整数在内存中存的是补码。
移位操作符移动的是存在内存中的补码。
2.1 左移操作符
移位规则: 左边抛弃、右边补0。
正的整数左移示例:
对7左移
补码:0000 0000 0000 0000 0000 0000 0000 0111
左移:0000 0000 0000 0000 0000 0000 0000 1110
左移后内存中存的还是补码,因为正整数的原码和补码相同,所以对7左移后的值十进制为14。
代码验证:
#include <stdio.h>int main()
{int a = 7 ;int b = a << 1;printf("a=%d\n", a);printf("b=%d\n", b);return 0;
}
运行结果:
a=7
b=14
变量b得到了变量a左移1位之后的变化,但变量a自身是不变的。
负的整数左移示例:
对-7左移
补码:1111 1111 1111 1111 1111 1111 1111 1001
左移:1111 1111 1111 1111 1111 1111 1111 0010
左移后内存中存的还是补码,因为负整数的原码和补码之间需要计算。
- 由负整数补码计算出反码:补码-1。
- 由负整数反码计算出原码:反码的符号位不变,其他位按位取反。
补码:1111 1111 1111 1111 1111 1111 1111 0010 (左移1位后)
反码:1111 1111 1111 1111 1111 1111 1111 0001 补码-1
原码:1000 0000 0000 0000 0000 0000 0000 1110 符号位不变,其他位按位取反。
计算出-7左移后的值十进制为-14。
代码验证:
#include <stdio.h>int main()
{int a = -7 ;int b = a << 1;printf("a=%d\n", a);printf("b=%d\n", b);return 0;
}
运行结果:
a=-7
b=-14
因为二进制数的每一位都是2的指数幂,所以左移1位后,只要没有发生数据溢出,值就会变为原来的2倍,如果变量为无符号整形或正整数,表达式 a << n 会将a的所有位左移n位,运算结果位a×。
2.2 右移操作符
移位规则:
- 逻辑移位:左边补0,右边丢弃。
- 算术移位:左边补原值的符号位,右边丢弃。(绝大多数编译器采用算术移位,所以示例都为算数移位结果)
正的整数右移示例:
对7右移
补码:0000 0000 0000 0000 0000 0000 0000 0111
左移:0000 0000 0000 0000 0000 0000 0000 0011
右移后内存中存的还是补码,因为正整数的原码和补码相同,所以7左移后的值十进制为3。
代码验证:
#include <stdio.h>int main()
{int a = 7 ;int b = a >> 1;printf("a=%d\n", a);printf("b=%d\n", b);return 0;
}
运行结果:
a=7
b=3
负的整数右移示例:
对-7右移
补码:1111 1111 1111 1111 1111 1111 1111 1001
左移:1111 1111 1111 1111 1111 1111 1111 1100
右移后内存中存的还是补码,因为负整数的原码和补码之间需要计算。
- 由负整数补码计算出反码:补码-1。
- 由负整数反码计算出原码:反码的符号位不变,其他位按位取反。
补码:1111 1111 1111 1111 1111 1111 1111 1100 (左移1位后)
反码:1111 1111 1111 1111 1111 1111 1111 1011 补码-1
原码:1000 0000 0000 0000 0000 0000 0000 0100 符号位不变,其他位按位取反。
计算出-7右移后的值十进制为-4。
代码验证:
#include <stdio.h>int main()
{int a = -7 ;int b = a >> 1;printf("a=%d\n", a);printf("b=%d\n", b);return 0;
}
运行结果:
a=-7
b=-4
因为二进制数的每一位都是2的指数幂,所以右移1位后,只要没有发生数据溢出,值就会变为原来的二分之一,如果变量为无符号整形或正整数,表达式 a >> n 会将a的所有位右移n位,运算结果位a÷。
警告:对于移位运算符,不要移动负数位,这个是标准未定义的。
三、位操作符
- & //按(2进制)位与
- | //按(2进制)位或
- ^ //按(2进制)位异或 —— 相同为0,相异为1
注:他们的操作数必须是整数。
3.1 按位与操作符 &
& :两者都为1时结果为1。
代码示例:
#include <stdio.h>int main()
{int a = -5;int b = 3;int c = a & b;printf("a=%d\n", a);printf("b=%d\n", b);printf("c=%d\n", c);return 0;
}
运行结果:
a=-5
b=3
c=3
先计算出-5和3的二进制位补码
-5二进制位
原码:1000 0000 0000 0000 0000 0000 0000 0101
反码:1111 1111 1111 1111 1111 1111 1111 1010
补码:1111 1111 1111 1111 1111 1111 1111 1011
3二进制位
补码:0000 0000 0000 0000 0000 0000 0000 0011
用补码进行按位与计算:
1111 1111 1111 1111 1111 1111 1111 1011 -5补码
0000 0000 0000 0000 0000 0000 0000 0011 3补码
0000 0000 0000 0000 0000 0000 0000 0011 -5 & 3 的补码
因为符号位为0,为正整数,所以原码与补码相同,对应十进制值为3。
3.2 按位或操作符 |
| :只要有一个为1,结果就为1。
代码示例:
#include <stdio.h>int main()
{int a = -5;int b = 3;int c = a | b;printf("a=%d\n", a);printf("b=%d\n", b);printf("c=%d\n", c);return 0;
}
运行结果:
a=-5
b=3
c=-5
用补码进行按位或计算:
1111 1111 1111 1111 1111 1111 1111 1011 -5补码
0000 0000 0000 0000 0000 0000 0000 0011 3补码
1111 1111 1111 1111 1111 1111 1111 1011 -5 | 3 的补码
因为符号位为1,为负整数,所以原码需由补码计算得出。
1111 1111 1111 1111 1111 1111 1111 1011 补码
1111 1111 1111 1111 1111 1111 1111 1010 反码
1000 0000 0000 0000 0000 0000 0000 0101 原码
计算得出原码的十进制值为-5。
3.3 按位异或操作符 ^
^ :相同为0,相异为1。
代码示例:
#include <stdio.h>int main()
{int a = -5;int b = 3;int c = a ^ b;printf("a=%d\n", a);printf("b=%d\n", b);printf("c=%d\n", c);return 0;
}
运行结果:
a=-5
b=3
c=-8
用补码进行按位异或计算:
1111 1111 1111 1111 1111 1111 1111 1011 -5补码
0000 0000 0000 0000 0000 0000 0000 0011 3补码
1111 1111 1111 1111 1111 1111 1111 1000 -5 ^ 3 的补码
因为符号位为1,为负整数,所以原码需由补码计算得出。
1111 1111 1111 1111 1111 1111 1111 1000 补码
1111 1111 1111 1111 1111 1111 1111 0111 反码
1000 0000 0000 0000 0000 0000 0000 1000 原码
计算得出原码的十进制值为-8。
编程题:不能创建临时变量(第三个变量),实现两个数的交换。
方法1代码示例:
#include <stdio.h>int main()
{int a = 5;int b = 3;printf("a=%d ", a);printf("b=%d\n", b);a = a + b;//变量a中存了a+b的和b = a - b;//a+b的和8减去变量b的值3就是变量a的初值5,//把5存在变量b中,此时变量a中的值还是a+b的和8a = a - b;//a+b的和8减去此时变量b的值5,就是变量b的初值3,//把3存在变量a中,此时变量a中的值是3printf("a=%d ", a);printf("b=%d\n", b);return 0;
}
运行结果:
a=5 b=3
a=3 b=5
但是这种方法会有溢出的问题。
方法2代码示例:
#include <stdio.h>int main()
{int a = 5;int b = 3;printf("a=%d ", a);printf("b=%d\n", b);a = a ^ b;//a = 5 ^ 3b = a ^ b;//b = 5 ^ 3 ^ 3 -> b=5a = a ^ b;//a = 5 ^ 3 ^ 5 -> a=3printf("a=%d ", a);printf("b=%d\n", b);return 0;
}
运行结果:
a=5 b=3
a=3 b=5
两个相同的数按位异或的结果为0;0和任何整数按位异或的结果为整数本身。
四、赋值操作符
a = b 就是把b的值赋给a,在 = 左侧必须是变量,不能是常量或表达式。
复合赋值符:+= -= *= /= %= >>= <<= &= |= ^=
下方每个代码框中的第1句使用复合赋值操作符的代码意思和它下一句代码意思相同。
a += 3;a = a + 3;
a >>= 3;a = a >> 3;
a &= 3;a = a & 3;
五、单目操作符
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
首先来明确一些定义:
- 操作符(运算符):可以进行运算的符号,如+、-、*、/ 等。
- 操作数:作为运算对象的变量或常量,如 a+b 中的 a和b。
- 单目操作(运算)符:只需要有1个操作数,如 +a,-b 。
- 双目操作(运算)符:需要两个操作数,如 a+b、c-d 。
5.1 逻辑反操作符!
!作用:把真变假,假变真。
C语言中0为假,非0为真。
代码示例:
#include <stdio.h>int main()
{int flag = 5;//if条件判断:非0为真,0为假if(flag)//flag为真,进入if{printf("真\n");}if(!flag)//flag为假,进入if{printf("假\n");}return 0;
}
5.2 正值+、负值-操作符
代码示例:
#include <stdio.h>int main()
{int a = +8;int b = +a;int c = -a;printf("a=%d\n", a);printf("b=%d\n", b);printf("c=%d\n", c);int e = -9;int f = +e;int g = -e;printf("e=%d\n", e);printf("f=%d\n", f);printf("g=%d\n", g);return 0;
}
运行结果:
a=8
b=8
c=-8
e=-9
f=-9
g=9
5.3 取地址操作符&
&操作符可以取出变量在内存中的首地址。
代码示例:
#include <stdio.h>int main()
{int a = 6;printf("%p\n", &a);int* p = &a;//p就是指针变量return 0;
}
运行结果:
000000AAD799FA74
5.4 计算操作数的类型长度sizeof
sizeof是一个操作符。
- 可以计算变量所占内存空间的大小,单位是字节。
- 可以计算类型所创建的变量占据空间的大小,单位是字节。
- 可以计算整个数组所占内存空间的大小,单位是字节。
代码示例:
#include <stdio.h>int main()
{//计算变量所占内存空间的大小,单位是字节。int a = 7;int n1 = sizeof(a); //计算变量a所占内存空间的大小printf("n1=%d\n", n1);//计算类型所创建的变量占据空间的大小,单位是字节。int n2 = sizeof(int);printf("n2=%d\n", n2);//计算整个数组所占内存空间的大小,单位是字节。int arr[10] = { 0 };printf("arr[10]=%d\n", sizeof(arr));return 0;
}
运行结果:
n1=4
n2=4
arr[10]=40
sizeof使用细节注意
代码示例:
#include <stdio.h>int main()
{int a = 3;printf("%d\n", sizeof(a));printf("%d\n", sizeof(int));printf("%d\n", sizeof a);//可以这样使用printf("%d\n", sizeof int);//不可以这样使用return 0;
}
区分:
- sizeof是操作符,不是函数。
- strlen是库函数,用来求字符串长度。
5.5 按位取反操作符 ~
~0 对0按位取反:
补码:0000 0000 0000 0000 0000 0000 0000 0000 0的原码、反码、补码都相同
取反:1111 1111 1111 1111 1111 1111 1111 1111
按位取反后内存中存的还是补码,负整数的原码和补码之间需要计算。
- 由负整数补码计算出反码:补码-1。
- 由负整数反码计算出原码:反码的符号位不变,其他位按位取反。
补码:1111 1111 1111 1111 1111 1111 1111 1111 (0按位取反后)
反码:1111 1111 1111 1111 1111 1111 1111 1110 补码-1
原码:1000 0000 0000 0000 0000 0000 0000 0001 符号位不变,其他位按位取反。
计算出0按位取反后的值十进制为-1。
代码验证:
#include <stdio.h>int main()
{int a = 0;printf("~a=%d\n", ~a);return 0;
}
运行结果:
~a=-1
~5 对5按位取反
代码示例:
#include <stdio.h>int main()
{int a = 5;printf("~a=%d\n", ~a);return 0;
}
运行结果:
~a=-6
~5
补码:0000 0000 0000 0000 0000 0000 0000 0101 5的原码、反码、补码都相同
取反:1111 1111 1111 1111 1111 1111 1111 1010
按位取反后内存中存的还是补码,负整数的原码和补码之间需要计算。
- 由负整数补码计算出反码:补码-1。
- 由负整数反码计算出原码:反码的符号位不变,其他位按位取反。
补码:1111 1111 1111 1111 1111 1111 1111 1010 (5按位取反后)
反码:1111 1111 1111 1111 1111 1111 1111 1001 补码-1
原码:1000 0000 0000 0000 0000 0000 0000 0110 符号位不变,其他位按位取反。
计算出0按位取反后的值十进制为-6。
对某个数的二进制任意一位进行置1或清0的改动:
代码示例:
#include <stdio.h>int main()
{int a = 12;a |= (1 << 4);printf("a=%d\n", a);a &= (~(1 << 4));printf("a=%d\n", a);return 0;
}
运行结果:
a=28
a=12
对12二进制的第五位置1
0000 0000 0000 0000 0000 0000 0000 1100 12补码
0000 0000 0000 0000 0000 0000 0001 0000 修改第五位的数可由1移位获得
0000 0000 0000 0000 0000 0000 0001 1100 12与上数按位或,得到指定修改位置1
第五位置1后的数十进制为28
对28二进制的第五位清0
0000 0000 0000 0000 0000 0000 0001 1100 28补码
0000 0000 0000 0000 0000 0000 0001 0000 修改第五位的数可由1移位获得
1111 1111 1111 1111 1111 1111 1110 1111 对1移位后的数按位取反
0000 0000 0000 0000 0000 0000 0000 1100 28与上数按位与,得到指定修改位置清0
第五位清0后的数十进制为12
5.6 ++和--操作符
- 前置++,先++,后使用;
- 后置++,先使用,再++;
- 前置--,先--,后使用;
- 后置--,先使用,再--;
代码示例:
#include <stdio.h>int main()
{int a = 6;int b = ++a;//前置++,先++,后使用//a = a+1; b = a;printf("a=%d\n", a);printf("b=%d\n", b);int c = 6;int d = c++;//后置++,先使用,再++//c = d; c = d+1; printf("c=%d\n", c);printf("d=%d\n", d);return 0;
}
运行结果:
a=7
b=7
c=7
d=6
代码示例:
#include <stdio.h>int main()
{int a = 6;int b = --a;//前置--,先--,后使用//a = a-1; b = a;printf("a=%d\n", a);printf("b=%d\n", b);int c = 6;int d = c--;//后置--,先使用,再--//c = d; c = d-1; printf("c=%d\n", c);printf("d=%d\n", d);return 0;
}
运行结果:
a=5
b=5
c=5
d=6
5.7 解引用操作符 *
代码示例:
#include <stdio.h>int main()
{int a = 6;int* p = &a;*p = 20;printf("a=%d\n", a);return 0;
}
运行结果:
a=20
- 取地址操作符&可以通过变量,找到地址;
- 解引用操作符*可以通过地址,找到变量。
上面程序中*p就等价于变量a。
5.8 强制类型转换操作符()
强制类型转换是把变量从一种类型转换为另一种数据类型。
代码示例:
#include <stdio.h>int main()
{int a = (int)3.14;printf("a=%d\n", a);return 0;
}
运行结果:
a=3
(int)可以强制将带小数点的数转换为整型。
5.9 sizeof和数组
代码示例:
#include <stdio.h>void test1(int arr[])
{printf("test1(arr[])=%d\n", sizeof(arr));
}
void test2(char ch[])
{printf("test2(ch[])=%d\n", sizeof(ch));
}
int main()
{int arr[10] = { 0 };char ch[10] = { 0 };printf("arr[10]=%d\n", sizeof(arr));printf("ch[10]=%d\n", sizeof(ch));test1(arr);test2(ch);return 0;
}
运行结果:
arr[10]=40
ch[10]=10
test1(arr[])=8
test2(ch[])=8
sizeof(数组名) 可得出整个数组在内存中的大小。
数组传参,传递的是数组首元素的地址。所以test1函数和test2函数中sizeof操作符读到的是数组首元素地址在内存中的大小。
六、关系操作符
>>=<<=!= 用于测试“不相等”== 用于测试“相等”
使用过程中注意==和=
代码示例:
#include <stdio.h>int main()
{if (3 == 5)//可以进行数是否相等的判断{printf("相等");}if ("abc" == "abcdef")//这样写实际上是在比较2个字符串的首字符的地址,//不是比较两个字符串是否相等{printf("相等");}//比较两个字符串是否相等应该使用strcmp库函数return 0;
}
七、逻辑操作符
&& 逻辑与:如果两边操作数都为真,则结果为真;
如果两边操作数有一个为假,则结果为假。
|| 逻辑或:如果两边操作数有一个为真,则结果为真;
如果两边操作数都为假,则结果为假。
代码示例:
#include <stdio.h>int main()
{int a = 0 && 2;int b = 1 && 2;int c = 0 || 2;int d = 1 || 2;int e = 0 || 0;printf("0 && 2 = %d\n", a);printf("1 && 2 = %d\n", b);printf("0 || 2 = %d\n", c);printf("1 || 2 = %d\n", d);printf("0 || 0 = %d\n", e);return 0;
}
运行结果:
0 && 2 = 0
1 && 2 = 1
0 || 2 = 1
1 || 2 = 1
0 || 0 = 0
- 区分逻辑与和按位与
- 区分逻辑或和按位或
代码示例:
#include <stdio.h>int main()
{int a = 1 & 2;int b = 1 && 2;int c = 1 | 2;int d = 1 || 2;printf("1 & 2 = %d\n", a);printf("1 && 2 = %d\n", b);printf("1 | 2 = %d\n", c);printf("1 || 2 = %d\n", d);return 0;
}
运行结果:
1 & 2 = 0
1 && 2 = 1
1 | 2 = 3
1 || 2 = 1
总结
以上就是今天要讲的内容,本文介绍了C语言操作符的使用。
相关文章:
C语言 操作符详解
C语言学习 目录 文章目录 前言 一、算术操作符 二、移位操作符 2.1 左移操作符 2.2 右移操作符 三、位操作符 3.1 按位与操作符 & 3.2 按位或操作符 | 3.3 按位异或操作符 ^ 四、赋值操作符 五、单目操作符 5.1 逻辑反操作符! 5.2 正值、负值-操作符 5.3 取地址…...
成为AI产品经理——回归模型评估(MSE、RMSE、MAE、R方)
分类问题的评估是看实际类别和预测类别是否一致,它的评估指标主要有混淆矩阵、AUC、KS。回归问题的评估是看实际值和预测值是否一致,它的评估指标包括MAE、MSE、RMSE、R方。 如果我们预测第二天某支股票的价格,给一个模型 y1.5x,…...
【C++11(一)】右值引用以及列表初始化
💓博主CSDN主页:杭电码农-NEO💓 ⏩专栏分类:C从入门到精通⏪ 🚚代码仓库:NEO的学习日记🚚 🌹关注我🫵带你学习C 🔝🔝 C11 1. 前言2. 统一的列表初始化3. initializer…...
通俗理解Jenkins是什么?
目录 通俗理解 Jenkins是什么? 通俗理解 假设你有一个软件项目,多个开发者在一起写代码。每当有人提交新的代码时,你想要自动地构建、测试这些代码,确保它们没有引入问题。 Jenkins就像一个聪明的助手,会在有人提交…...
格雷希尔帮助仪器仪表测试时快速密封的G60C系列接头其优势有哪些
仪器仪表在工业领域中扮演着重要的角色,如:压力表,压力传感器、压力变送器、压力开关、压力歧管等这些,在工业领域中都是随处可见的,其数据的精度直接影响着产品在生产过程中的质量和安全性;因此࿰…...
系统运维工具KSysAK——让运维回归简单
系统运维工具KSysAK——让运维回归简单 1.基本信息 1.1概述 系统异常定位分析工具KSysAK是云峦操作系统研发及运维人员总结开发及运维经验,设计和研发的多个运维工具的集合,可以覆盖系统的日常监控、线上问题诊断和系统故障修复等常见运维场景。 工具…...
NowCoder | KY11 二叉树遍历
NowCoder | KY11 二叉树遍历 OJ链接 简单来说就是构建这个二叉树定义结构体通过递归方式根据输入的字符串构建二叉树。对于输入字符串中的每个字符,如果是 ‘#’ 表示空节点,否则创建一个新节点,并递归地构建左右子树。 #include <limit…...
android.view.WindowLeaked解决方法
问题 我在使用WindowManager添加一个button, windowManager.addView(button,layoutParams);然后关闭当前的这个Activity的时候遇到了WindowLeak这个问题,也就是所谓的窗体泄露。 原因 主要原因是因为android只允许在UI主线程操作,我在使用W…...
浪潮信息KeyarchOS的飞跃之路
1.背景 在正式向大家介绍KOS之前,我们先关注这样一些问题。 传统操作系统在大规模数据处理、高性能计算和人工智能应用方面面临着一些瓶颈问题,包括存储和访问效率、数据传输和通信效率、并行计算性能等等问题。为了能够更好的改进这些问题,…...
C++基础 -41- 迭代器
每个stl 模板接口都有一个专用的迭代器 迭代器就是 stl 库中的 一个特殊指针,功能与指针类似(类似但不是) 迭代器定义格式 迭代器的使用,使用迭代器遍历向量容器的参数 代码运行结果 无论使用普通方式还是迭代器方式去都可以遍历vector容器...
zookeeper心跳检测 (实操课程)
本系列是zookeeper相关的实操课程,课程测试环环相扣,请按照顺序阅读来学习和测试zookeeper。 阅读本文之前,请先阅读----zookeeper 单机伪集群搭建简单记录(实操课程系列)zookeeper 客户端常用命令简单记录…...
社区新零售:重塑零售业的全新模式
社区新零售:重塑零售业的全新模式 近年来,新零售业成为了研究的焦点,它是一种以互联网为基础的零售形式。新零售通过运用先进技术手段,如大数据和人工智能,对商品的生产、流通和销售过程进行升级改造,重新构…...
北京华联BHGMall“宠粉模式”不断迭代,强体验注互动成行业UP主
在今年双11热度遇冷后,双十二被官宣取消,而这背后本质已经间接印证:传统“电商大促”的模式,已经难以为继。反观线下消费市场,则是以持续恢复和增长成为经济恢复的亮点,从线下客流量的快速回升,…...
前端时间的失败总结复盘
分享失败经验,前段时间的总结复盘: 与伙伴合作面对异常决策要及时提出质疑,怼,别太客气,客气起来,小心翼翼在意他人情绪那么这个项目就会让人难受,不要因为因为伙伴身上有标签/光环/权威就觉得…...
Ribbon 负载均衡
1、负载均衡整体流程 2、负载均衡流程逐级跟踪运行 (1) LoadBlanced 注解可以使LoadBalancerInterceptor拦截到; (2)LoadBalancerInterceptor 实现了ClientHttpRequestInterceptor接口; (3)ClientHttpRequestInterceptor接口释义如下; (4)int…...
微服务实战系列之Cache(技巧篇)
前言 凡工具必带使用说明书,如不合理的使用,可能得到“意外收获”。这就好比每个人擅长的领域有所差异,如果放错了位置或用错了人,也一定会让 Leader 们陷入两难之地:“上无法肩负领导之重托,下难免失去伙伴…...
6.17验证二叉树(LC98-M)
算法: 中序遍历下,输出的二叉搜索树节点的数值是有序序列。 有了这个特性,验证二叉搜索树,就相当于变成了判断一个序列是不是递增的了。 具体地:中序遍历时,判断当前节点是否大于中序遍历的前一个节点&a…...
【Linux】编译器-gcc/g++与调试器-gdb的使用
👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.gcc/g语法 2.gcc的使用及…...
Google Guava 散列工具使用详解
文章目录 散列哈希函数哈希码布隆过滤器 散列 Guava 提供了一组散列(哈希)相关的工具类和方法,包括哈希函数接口、哈希算法实现、哈希码(HashCode)类、布隆过滤器(BloomFilter)等等。 Guava 提…...
AIGC-文生视频
stable diffusion的前传: 轻松理解 VQ-VAE:首个提出 codebook 机制的生成模型 - 知乎近两年,有许多图像生成类任务的前沿工作都使用了一种叫做"codebook"的机制。追溯起来,codebook机制最早是在VQ-VAE论文中提出的。相比…...
java中Collectors.groupingBy返回实例?
在Java中,Collectors.groupingBy()是一个用于对流元素进行分组的收集器。它可以根据指定的分类函数对流元素进行分组,并返回一个Map对象,其中键是分组的标准,值是属于相应组的元素列表。 下面是一个使用Collectors.groupingBy()方…...
uniapp打包的h5项目多了接口调用https://api.next.bspapp.com/client
产生跨域问题。 这个实际上是因为该项目在manifest.json文件中勾选了‘uni统计配置’导致的,取消勾选就可以了。 如果是小程序项目,在小程序开发者工具中添加可信任域名就可以了。 可以看看下面这个链接内容 uni-app H5跨域问题解决方案(…...
探索跨境建站:如何借助软骨鱼SaaS平台快速搭建独立站
随着全球电子商务的蓬勃发展,作为一名资深的跨境电商从业者,我深知跨境建站服务需要与时俱进,不断迈向更高效、更智能的2.0时代。今天,我想和大家分享一个让我眼前一亮的解决方案——软骨鱼SaaS平台,这个平台彻底颠覆了…...
C语言-字符串输入输出
字符串赋值 char *t “title”;char *s;s t;并没有产生新的字符串,只是让指针s指向了t所指的字符串, 对s的任何操作就是对t做的 字符串输入输出 char string[8];scanf(“%s”, string);printf(“%s”, string);scanf读入一个单词(到空格…...
OpenHarmony 设备启动Logo和启动视频替换指南
前言 OpenHarmony源码版本:4.0release 开发板:DAYU / rk3568 一、Logo替换 替换其中的logo.bmp 和 logo_kernel.bmp文件 注意事项: 1、图片的分辨率需要和设备匹配 2、如果是非首次编译(存在缓存)需要将out目录删…...
Python中函数添加超时时间,Python中signal使用
from time import time, sleepimport signal# 模拟要删除5条数据,中间有超时的i 5# 超时后执行的方法def timeout_handler(signal, frame):# 引发异常raise TimeoutError("删除第" str(i) "条,超时!")# 或者执行其他操作,不往外抛异常(超时的函数不会被…...
【C语言】递归详解
目录 1.前言2. 递归的定义3. 递归的限制条件4. 递归举例4.1 求n的阶乘4.1.1 分析和代码实现4.1.2 画图演示 4.2 顺序打印一个整数的每一位4.2.1 分析和代码实现4.2.2 画图推演 4.3 求第n个斐波那契数 5. 递归与迭代5.1 迭代求第n个斐波那契数 1.前言 这次博客内容是与递归有关&…...
NSSCTF 文件上传漏洞题目
目录 [SWPUCTF 2021 新生赛]easyupload1.0 [SWPUCTF 2021 新生赛]easyupload2.0 [SWPUCTF 2021 新生赛]easyupload3.0 [SWPUCTF 2021 新生赛]easyupload1.0 这是一个文件上传漏洞的题目 我们的思路是上传一句话木马,用工具进行连接 先编写一句话木马 将文件后缀…...
layui+ssm实现数据表格双击编辑更新数据
layui实现数据表格双击编辑数据更新 在使用layui加载后端数据请求时,对数据选项框进行双击即可实现数据的输入编辑更改 代码块 var form layui.form, table layui.table,layer parent.layer undefined ? layui.layer : parent.layer,laypage layui.laypag…...
windows下DSS界面本地集成linkis管理台
说明:当前开发环境为windows,node版本使用16.15.1。启动web时,确保后端服务已准备就绪。 1.linkis web编译 #进入项目WEB根目录 $ cd linkis/linkis-web #安装项目所需依赖 $ npm install参考官方编译说明,windows下编译一直异常…...
专业网站建设模板下载/什么软件可以推广自己的产品
给出凸包的定义: 简要说一下思路: 首先将所有点按照x从小到大(x同则y从小到大)排序 把p1,p2放入凸包,从p3开始,当新点在凸包‘前进’方向的左边时继续,否则依次删除最近加入凸包的点,…...
长沙住建信息中心网站/能够免费换友链的平台
数据结构是:数组链表红黑树 1、putVal 插入值:得到数组下标索引值, 如果数据下标处为null,则放入该位置, 如果不为空,判断key是否相等, 如果相等,则…...
如何自己做加盟网站/企业网站seo案例
第七章 指针7 .1 选择题1. 若有说明:int a 2, *p &a, *q p;,则以下非法的赋值语句是 (D)。A. p q; B. *p *q; C. a *q; D. q a;a是整型数,int *p,*q定义了…...
用苹果cms做电影网站/最好的免费信息发布平台
需求: python代码实现 1. 按层打印二叉树 2. 需要打印二叉树层与层之间的斜线 3. 结点的下一层如果没有子节点,以‘N’代替 方法: 使用namedtuple表示二叉树使用StringIO方法,遍历时写入结果,最后打印出结果打印…...
做家政网站公司名称/seo优化软件哪个好
Idea 的 task server 配置为 Gitlab 个人站点 http://ronnie.wang 找到配置窗口,Preferences -> Tools -> Tasks -> Servers 点击加号,添加 Gitlab 点击增加之后的条目,可以看到下面的配置项 在 Server URL 填 Gitlab 服务器的…...
wordpress 重复点赞/专业整站优化
经过两个小时的奋战,终于将博客园服务器抢救过来。问题的原因已经找到。等会我会写文章描述这次抢救过程。 这两天博客园服务器的不稳定,给大家带来了很大的麻烦,在这里博客园向大家表示深深的歉意!希望得到你的谅解!...