/ 浮点型结果为浮点型,但是如果整型 / 整型产生的结果中有小数(浮点型)只会显示整数部分,除非将其中一个或两个都写成浮点型,比如 5 / 3 产生小数但只显示整数,我们可以写成 5.0 / 3此时会显示小数部分...左边补0 2.算术右移:左边补原符号位(正数为0,负数为1) 小结 左移一位有将原数字扩大两倍的效果,右移一位有将原数字缩小两倍的效果(特殊数除外,如0、-1、1等) 注意:在使用移位操作符时...,不能移动负数位,比如 a会导致意想不到错误 位操作符 位操作符有三个 按位与&、按位或 |、按位异或 ^ 一样两端操作符必须是整数。...exp2 : exp3 exp1为条件判断式,当判断式为真时,进入exp2,为假就进入exp3 逗号表达式 逗号表达式是用逗号隔开多个表达式,然后从左向右计算,最终取最右边表达式的结果。...访问结构体成员 . -> 访问结构体成员有两种方式:普通访问与指针访问 普通访问:结构体.成员名 指针访问:结构体指针->成员名 表达式求值 表达式求值的顺序一部分是有操作符的优先级和结合性决定的
,在字符串操作指令的执行过程中,对它们有特定的要求,且具有特殊的功能 2个指针寄存器:SP和BP (1)BP为基指针寄存器,用它可直接存取堆栈中的数据 (2)SP为堆栈指针寄存器,用它只可访问栈顶...2.ADC带进位加指令:把源操作数和进位标志CF一起加到目的操作数 3.INC指令:操作数的值加1 4.交换加指令XADD:先交换两个操作数的值,在镜像加法运算 减法指令 1.SUB减法指令:从目的操作数中减去源操作数...2.SBB带借位减法:把源操作数和标志位CF的值从目的操作数中一起减去 3.DEC减法:把源操作数的值减去1 4.求补指令NEG:改变操作数的正负号 乘法指令 MUL指令:隐含目的操作数,把源操作数和...4.SAR指令(算术右移) SAR类似于SHR,SAR同SHR的区别是:SHR连同符号位一起右移,左边最高位出现的空位补0;而SAR右移时符号位不动,左边出现的空位补上符号位的值。...AL,AX中减去由ES:DI指向的目标串中的元素,结果不送到任何地方,只改变状态标志位;同时,根据DF和串的类型修改DI,使之指向串的下一个元素。
算术右移: 11111111111111111111111111111011 ->-5 逻辑右移: 01111111111111111111111111111011... int main(){ int a = 3.14;//浮点型转换为int型会损失精度,产生警告。 ...,输出项列表),从字符数组s中读取,而不是从键盘读取, 字符串数组与函数 **************************************************************...而在同一系统中地址由多个相同的bit构成 变量(int,float,double,char等)占用内存中的字节,首个字节的地址是该变量的地址 初始化 声明指针时必须对其进行初始化(为0,NULL...(定义和初始化)与普通数组相同。 结构指针:指向结构的指针。
运算符 算术运算符 Go语言中的算术运算符包括加、减、乘、除和取模等。需要注意的是,除法运算符/和取模运算符%只能用于整数类型,而不能用于浮点数类型。...另外,Go语言中的自增自减运算符只能用于语句中,不能用于表达式中。 用于进行基本的算术运算,包括加法、减法、乘法、除法、取模等。...将左操作数的所有位向左移动指定的位数 >> 右移运算符。...将右边表达式的值从左边的变量中减去 *= 乘等于运算符。将右边表达式的值乘到左边的变量上 /= 除等于运算符。将左边变量的值除以右边表达式的值 %= 模等于运算符。...需要注意的是,取地址运算符和指针运算符只能用于指针类型,而sizeof运算符只能用于静态类型。
.* ->*成员对象选择/成员指针选择自左向右5* / %乘法/除法/取余6+ −加号/减号7>位左移/位右移8 >=大于/大于等于9== !...C++ 内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符。 关系运算符。 逻辑运算符。 位运算符。 赋值运算符。 杂项运算符。 一、算术运算符 下表显示了 C++ 支持的所有算术运算符。...假设变量 A 的值为 10,变量 B 的值为 20,则: 运算符描述实例+把两个操作数相加A+B将得到30-从第一个操作数中减去第二个操作数A-B将得到-10*把两个操作数相乘A*B将得到200/分子除以分母...,逗号运算符会顺序执行一系列运算。整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值。.(点)和->(箭头)成员运算符用于引用类、结构和共用体的成员。...杂项运算符实例: 请看下面的实例,了解 C++ 中运算符的优先级,复制并黏贴下面的 C++ 程序到 test.cpp 文件中,编译并运行程序即可。 对比有括号和没有括号时的区别,这将产生不同的结果。
1,当有符号的x和无符号数进行比较时,x会隐式类型转换被当做无符号数,是一个很大的数, 这时就选择A了 其实还是等级的问题,无符号数等级高于同类型的有符号数,在比较或者计算时会先进行转换,同上一道题 左移右移操作符...正确答案:C (1 > 31);注意,这里在右移的时候采用的是算术右移...答案解析: 正确答案:B 循环在*t为0时停止,同时t++,t最后会停在字符串结束的'\0'之后的一个位置,t作为尾部指针减去头部指针就是整个字符串占用内存的字节数,包含'\0'在内;而c答案字符串长度不包括最后的...C: 设变量p是一个指针变量,则语句p=0;是非法的,应该使用p=NULL; D: 指针变量之间不能用关系运算符进行比较 答案解析: 正确答案:B A选项描述不正确,不同类型指针一般不可以直接赋值;C...选项中,在C语言里p=NULL;和p=0;是等价的;D选项中,指向同一数组的两指针变量进行关系运算可表示它们所指数组元素之间的位置关系(低地址or高地址)。
; ‘*’ ——算术乘,用于计算两数之积; 从测试结果中我们可以看到,算术乘法可以用于整数之间的相乘,小数之间的相乘以及整数和小数之间的相乘; ‘/’——算术除,用于计算两数之商; 从测试结果中我们可以看到...7.移位方式的测试 在了解完上述内容后下面我们来对这些移位方式分别测试一下: 从测试结果中我们可以看到,不管是逻辑左移还是算术左移,移动后的值都相同,但是在右移操作中,逻辑右移与算术右移的结果相差甚远...; '*'——解引用操作符,常用于指针,将指针进行解引用操作后,可以取出存放在地址中内容; '&'——取地址,将操作对象在内存中存储的地址提取出来,常用在指针中,将提取出来的地址存放进指针; 从测试结果中...提到指针后可能有朋友还不太理解这两个操作符的具体作用,这里我来给大家再详细介绍一下这两个操作符; 取地址与解引用操作符 首先我们要复习一下地址是如何产生的?...,sizeof的括号里放入的是一个表达式,表达式的内容是将整型b加上5后放入短整型a中,按照正常的逻辑来说,此时a的值会发生变化由0变成15,a的类型可能会进行整型提升,也可能会进行截断,结果会是什么呢
: • 逗号表达式:, • 下标引用:[ ] • 函数调用:( ) • 结构体成员访问:. 、-> 上述操作符中,除了单目操作符中的&、*将会在后续指针的vlog中介绍,高亮部分操作符是该篇要重点介绍的...从2进制序列中右边低位开始向左每4个2进制位会换算一个16进制位 剩余不够4个2进制位的直接换算 如:2进制的01101011,换成16进制:0x6b,16进制表示的时候前面加0x 3.原码、...,右边抛弃 算术右移:左边用原值的符号位补充,右边抛弃 4.2 位操作符 位操作符的操作数必须是整数 按位与:& 按位或:| 按位异或:^ 按位取反:~ 以下举例a = 5,b...> 算术运算符 > 关系运算符 > 逻辑运算(&& > ||) > 赋值运算符 6.表达式求值 6.1整型提升 C语言中整型算术运算总是以普通整型进行的 为了确保每个整型都是普通类型的便于系统运算...,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升 保证计算精度 例如,在一个 8 位系统中,char类型的取值范围是 - 128 到 127。
然后判断s和目标值的关系,如果相等,则将滑动窗口内的数字整合成数组,并添加到结果数组中。 s ≥ target的时候需要将滑动窗口缩小,也就是将左侧的值从s中减去,并右移左指针。...s 指针右移,并将右侧的值添加到s中。...分析: 当s === target时,我们需要将滑动窗口内的元素生成一个数组,并添加到结果数组中。生成的方是通过map遍历,将每个元素的值设置为 index + i ,从而得到递增的正整数数组。...还需要注意的是,缩小滑动窗口时,需要先将当前左指针所在的数字从s中减去,再右移左指针。如果先右移左指针的话,就会多减去 「1」 ,导致最终结果异常。...同样的,扩大滑动窗口的时候,需要先右移右指针,再将当前右指针所在的数字添加到s中。如果先添加右指针元素的话,就会导致右指针元素重复添加一次,从而少添加1,导致最终结果异常。 总结 本题考查双指针。
补充:移位操作符 移位操作符分为左移和右移操作符。 使用右移操作符的时候需要注意的是右移是算术移位还是逻辑移位。...算术移位和逻辑移位的区别在于 逻辑右移是 右边丢弃 左边补0;算术右移是右边丢弃,左边补原符号位 那么现在主流是算术右移还是逻辑右移呢?...,那么结果是正数,如果是算术右移,那么结果是-1。...显然,目前主流的是算术右移。 那么左移呢? 左移其实就挺简单了,只有左边丢弃,右边补0。 可以注意到,右移是2的n次方的效果,左移是*2n的效果。...C语言中整型算术运算总是至少以缺省整型类型的精度来进行的 为了获得这个精度,表达式中的字符和短整型操作数在使用前被转换为普通整型,称为整型提升 注意几个点: 1 整型提升是按照数据变量的符号位进行提升的
寄存器移位方式3中有:ASR(算术右移)、LSL(逻辑左移)、LSR(逻辑右移)、ROR(循环右移)、RRX(带扩展的循环右移),移位的位数可以使用立即数也可以使用寄存器方式表示。...同样寻址方式的地址计算方法有3种:普通的偏移量、事先更新方法、事后更新方法。 普通的偏移量方法就是基址寄存器中的数值直接和偏移量做加减运算,表示为[ ,地址偏移量 ]。...SUC在SUB的基础上再减去CPSR中C条件标志位的反码。这两个指令联合使用同样也可以进行64位数的减法操作。...异常中断产生指令 在ARM概述中,咱们知道ARM有7种模式,可以分为用户模式和特权模式。在特权模式中可以访问系统的所有资源以及任意切换到别的模式。...↩︎ 算术右移是带有符号位,即最高位的值保留;逻辑右移是用0填充左边被移走的位;循环右移是用右边移出的位填充左边的位;带拓展的循环右移是使用CPSR中的C位填充最高位。
示例: 输入:target = 9 输出:[[2,3,4],[4,5]] 解法:快慢指针 和前面题目很相似,这里也是“双指针”的思路。...不同的地方有 2 个点: 指针是从第 0 个和第 1 个位置开始的(下面称为 a 和 b) 这里要计算指针范围内的所有元素和(题目要求是“连续序列”) 每次移动 a、b 之前,都要计算一下当前[a,b]...如果等于 s,打印并且 b 右移;如果小于 s,b 右移;如果大于 s,a 右移。 至于为什么相等的时候 b 右移而不是 a 右移?因为 b 右移后,可能发生 a 右移。...但是如果 a 直接右移,那么会漏掉情况。...++b; sum += b; } else if (sum > target) { sum -= a; // 注意,这里是先减去指针对应的值
例如,int*是指向整数(int)类型的指针。指针变量是一个存储了内存地址值的变量,可以使用指针变量来存储、操作和访问内存中的数据。...程序中存在无效指针,不是好的程序设计风格 产生无效指针的原因很多,例如 说明指针变量后还没有给它赋值 指针被定义后,必须将指针和一个特定的变量进行关联后,才可以使用指针,即必须先赋值再使用。...NULL是C指针类型的一个特殊值,在系统文件stdio.h中定义,其值为0,称为“空” 表示指针变量的值为空,不指向任何变量或函数 NULL值属于所有指针类型。...在C语言中,指针操作包括指针的算术运算、指针的比较和指针的递增/递减等。 7.2.1 指针的算术运算 指针的加法运算:可以将指针与一个整数相加,结果是指针指向的内存地址增加了若干个字节。...指针的减法运算:可以将一个指针减去另一个指针,结果是两个指针之间的距离(以字节为单位)。
移位规则: 1.逻辑右移:左边用0填充,右边丢弃; 2.算术右移:左边用原该值的符号位填充,右边丢弃(大部分编译环境都是算术右移)。...: 算术右移: 警告:对于移位运算符,不要移动负数位,这个是标准未定义的。...由于乘法 的优先级⾼于加法,所以会先计算 4 * 5 ,⽽不是先计算 3 + 4 。...为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。...//实例1 char a,b,c; ... a = b + c; b和c的值被提升为普通整型,然后再执行加法运算。 加法运算完成之后,结果将被截断,然后再存储于a中。 如何进行整体提升呢?
C 指针是一个用数值表示的地址。因此,您可以对指针执行算术运算。可以对指针进行四种算术运算:++、--、+、-。...假设 ptr 是一个指向地址 1000 的整型指针,是一个 32 位的整数,让我们对该指针执行下列的算术运算: ptr++ 在执行完上述的运算之后,ptr 将指向位置 1004,因为 ptr 每增加一次...这个运算会在不影响内存位置中实际值的情况下,移动指针到下一个内存位置。如果 ptr 指向一个地址为 1000 的字符,上面的运算会导致指针指向位置 1001,因为下一个字符位置是在 1001。...下面的程序递增变量指针,以便顺序访问数组中的每一个元素: 实例 #include const int MAX = 3; int main () { int var[] =...同样地,对指针进行递减运算,即把值减去其数据类型的字节数,如下所示: 实例 #include const int MAX = 3; int main () { int
那么从原码得到补码的方式就是取反加一。 从补码得到原码的方式就是加一取反,但实际上由于是二进制,所以对补码取反加一也能得到原码。 对于整形来说:数据存放内存中其实存放的是补码。 为什么呢?...1; printf("num=%d\n", num); printf("n=%d\n", n); return 0; } 逻辑右移: 算术右移: 而究竟采用哪种右移方式,这是c语言标准未明确规定的...不过,大部分的编译器比如vs2022,采用的都是算术右移。 注意:对于移位运算符,不要移动负数位,这个是标准未定义的。 int n = 10; n>>-1;//这是错误的 5....、++、--、&、*、+、-、~ 、sizeof、(类型) //(类型)这个操作符是强制类型转换 单目操作符的特点是只有一个操作数,单自操作符中只有&和*没有介绍,这两个操作符都是与指针有关的,放到指针的博客中进行介绍...表达式求值 整形提升 C语言中整型算术运算总是至少以缺省(默认)整型类型的精度来进行的。 为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。
双指针也并不局限在数组问题,像链表场景的 “快慢指针” 也属于双指针的场景,其快慢指针滑动过程中本身就会产生一个窗口,比如当窗口收缩到某种程度,可以得到一些结论。...),否则将第二个点右移(数字会变大),其实第二个和第三个数就是滑动窗口。...那么同理,快慢指针中,慢指针要想被尽快追上,速度可能最好是快指针的一半。那从逻辑上分析,为什么呢?...链表中倒数第k个节点 链表中倒数第k个节点是一道简单题,题目如下: 输入一个链表,输出该链表中倒数第 k 个节点。为了符合大多数人的习惯,本题从 1 开始计数,即链表的尾节点是倒数第 1 个节点。...这道题双指针的移动规则比较巧妙,与上面普通题目不一样,重点不是在是否会运用滑动窗口算法,而是能否找到移动指针的规则。 当然你可能会说,为什么两个指针要定义在最两端,而非别的地方?
移位操作符 (1)、 <<(左移)---左移1位相当于*2 >>(右移)---右移1位相当于/2 左移和右移移动的都是二进制的位数,这里普及一下二进制的储存;二进制的原码,反码,补码, 负数在内存中存储的时候...:逻辑移位和算术移位; 逻辑移位的移位规则:左边用0填充,右边丢弃 算术移位的移位规则:左边用原该值的符号位填充,右边丢弃(一般都是算数右移) 注意:移位操作符的操作数只能是整数!...逗号表达式 逗号表达式,就是用逗号隔开的多个表达式;逗号表达式是从左向右依次执行,整个表达式的结果是最后一个表达式的结果. 10....操作符应用在-结构体变量.成员 -> 操作符应用在-结构体指针->成员 11....,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升.
EDX:(I/O指针)数据寄存器。 EBP:(SS段中栈内数据指针)扩展基址指针寄存器。 ESI:(字符串操作源指针)源变址寄存器。...这些状态标志允许单个的算术操作产生三种不同数据类型的结果:无符号整型,有符号整型以及BCD整型。...此外在执行多倍精度算术运算时,CF标志用来将一次运算过程中带进位的加法(ADC)或带借位的减法(SBB)产生的进位或借位传递到下一次运算过程中。...3、同一个类的实例分配在一个段中,只有该类的方法可以访问,如果其他类的方法去访问,会因为段保护而出错。可以从硬件上实现类的数据保护和隐藏。...这里大家可以具体的去运行看看,可以说,完全对标志位不参生任何影响的算术指令是几乎没有的,总是会或多或少的对标志位产生影响。
算术操作符: +:用于将两个数值相加。例如:3 + 5 = 8。 -:用于从一个数值中减去另一个数值。例如:5 - 3 = 2。 *****:用于将一个数值乘以另一个数值。...>>:右移运算符,将一个二进制位的操作数按指定的位数向右移动,左边是符号位(正数为0,负数为1)。 位操作符: &:按位与运算符,对应位都为1时,结果为1,否则为0。...+=、-=、*=、/=、%=、&=、|=、^=、>=**等:复合赋值运算符,执行算术或位运算后赋值。 单目操作符: !:逻辑非运算符,用于对一个条件进行取反。例如:!...*(间接访问):通过指针访问变量。例如:ptr->field 或 (*ptr).field。 sizeof:返回变量或数据类型的大小(以字节为单位)。例如:sizeof(int)。...调用标准库中的 printf 函数并输出字符串 "Hello, World!"。 结构成员访问符(点符号 .):用于访问结构体变量的成员。
领取专属 10元无门槛券
手把手带您无忧上云