H C 语言常量数字默认为有符号数,无符号数用后缀字母 U 1.2 进制转换 整数转换 除法——除基取余法 小数转换 乘法——乘基取整法 1.3 数值范围 无符号数值 补码数值...1.4 类型转换 有符号数和无符号数的转换规则: 位模式不变、数值可能改变(按不同编码规则重新解读) 隐式转换 有符号数隐式转换为无符号数 当表达式中有符号和无符号数混用时,包括比较运算符连接的表达式...image.png 符号扩展 对于给定 w 位的有符号整型数 x 转为 w+k 位相同数值的整型数,将符号位复制 k 份 C 语言中从短整数类型向常整数类型转换时自动进行符号扩展 image.png...整数截断 无符号数的截断(w 位 →\rightarrow→ k 位) 有符号数的截断(w 位 →\rightarrow→ k 位) 1.5 整数运算 加法 1....有符号数加法 image.png image.png 【注】CPU 其实并不知道操作的是有/无符号数,CPU 所做的便是将两个 w 位的二进制数 x、y 相加并将结果的进位 w+1 位去掉(即只保留结果的后
A1:溢出,就是运算结果超出可表示的数值范围。注意:进位、借位不一定会产生溢出。...A3:对于有符号整数而言,溢出意味着运算结果将与期待值不同从而导致错误; 对于浮点数而言,会对上溢出和下溢出进行特殊处理,从而返回一个可被IEEE 754表示的浮点数。 ...对于无符号数A与B而言,则是通过CF和ZF来判断。 1. 若CF为1,表示A-B时A发生借位操作,那么可以判定 A<B 2....尾数相乘 注意:尾数相乘时,是执行无符号数的乘法,并且不对结果进行截断。 4. 结果左规格化,尾数左移,且阶码减1,直到最高位为1为止 5....尾数相除 注意:尾数相除时,是执行无符号数的除法,并且不对结果进行截断。 4. 结果左规格化,尾数左移,且阶码减1,直到最高位为1为止 5.
这与调用 parseFloat() 方法的结果相同,但减法更高效、快捷。减法运算符的隐性转换如果失败,则返回 NaN,这与使用 parseFloat() 方法执行转换时的返回值是不同的。...被任意数字除,结果是Infinity或-Infinity //符号由第二个操作数的符号决定 console.log(Infinity / Infinity); //返回NaN console.log(n.../ 0); //0除一个非无穷大的数字,结果是Infinity或-Infinity,符号由第二个操作数的符号决定 console.log(n / -0); //返回-Infinity,解释同上 求余运算...求余运算也称模运算例如: console.log(3 % 2); //返回余数1 模运算主要针对整数进行操作,也适用于浮点数。...示例 下面比较递增和递减的 4 种运算方式所产生的结果。
通常采用二进制数的最高位来表示符号,用 ”0“ 表示正数,”1“ 表示负数。 整数的表示 整数可分为无符号整数和有符号整数。...在无符号整数中,所有二进制位全部用来表示数的大小;在有符号整数中,用最高位表示数的正负号,其他位表示数的大小。如果用一个字节表示一个无符号整数,其取值范围是 0 ~255。...如果表示一个有符号整数,其取值范围是 -128 ~ 127。计算机中的地址常用无符号整数表示,可以用 8 位、16 位或 64 位来表示。...按位移动会先将操作数转换为大端字节序顺序(big-endian order)的 32 位整数,并返回与左操作数相同类型的结果。右操作数应小于 32 位,否则只有最低 5 个字节会被使用。...向右被移出的位被丢弃,左侧用 0 填充。因为符号位变成了 0,所以结果总是非负的。 对于非负数,有符号右移和无符号右移总是返回相同的结果。
位操作符用于最基本的层次上,即按内存中表示数值的位来操作数值。...左移 用左移操作符(<<) 左移操作后,会以0来填充右侧的空位 左移不会影响操作数的符号位 6. 有符号右移 右移操作符(>>) 怎么理解呢?...我是这么理解的,右移,左边补0,把右边的值挤出了32个位置 7. 无符号右移 无符号右移(>>>) 对于负数,太难了 似乎是将反码的值当成右移前的初值,再正常移 3.5.3 布尔操作符 1....乘法(*) 乘法运算 如果Infinity与0相乘,则结果是NaN 如果Infinity与非0数值相乘,则结果是Infinity或-Infinity,取决于有符号操作数的符号 2....除法(/) 如果是零被零除,则结果是NaN 如果是Infinity被任何非零数值除,则结果是Infinity或-Infinity,取决于有符号操作数的符号 3.
整数 整数使用 “除二取余,逆序排列” 来转换为二进制,下面是18转换为二进制的例子: // 除二取余 18 / 2 = 9...0 9 / 2 = 4...1 4 / 2 = 2...0 2 /...用二进制计数时,只需用两个独立的符号“0”和“1” 来表示。 整数 整数使用 “按权相加” 法,即二进制数首先写成加权系数展开式,然后按十进制加法规则求和。...(operands)当作32位的比特序列(由0和1组成),前 31 位表示整数的数值,第 32 位表示整数的符号,0 表示正数,1 表示负数。...按位操作符操作数字的二进制形式,但是返回值依然是标准的JavaScript数值。 ? 按位与( AND) 对于每一个比特位,只有两个操作数相应的比特位都是1时,结果才为1,否则为0。...,可以使用 a | 0 12.1 | 0 // 12 12.9 | 0 // 12 按位异或(XOR) 对于每一个比特位,当两个操作数相应的比特位有且只有一个1时,结果为1,否则为0。
介绍 乘法指令分为无符号数乘法指令和有符号数乘法指令两种,它们唯一的区别是相乘的两个操作数是有符号数据还是无符号数据。 乘法指令的被乘数是隐含操作数,乘数需在指令中显式写出来。...格式及功能介绍 无符号数乘法指令 指令格式:MUL opr 功能:将指令中指定的操作数与隐含的被乘数(都为无符号数)相乘,所得的乘积按表中的对应关系存放。...注: 对标志位的“无定义”和“不影响”不同。无定义是指指令执行后,标志位的状态不确定;不影响是指指令的结果不影响标志位。即标志位保持原状态不变。...MUL指令中的操作数可以使用除立即数以外的其他寻址方式,但当是寄存器时,操作器只能是通用寄存器。...由于采用补码形式表示的整数具有固定的长度,因此在汇编指令系统中,经常有一些指令需要将其中的操作数进行符号位扩展。
算术操作符 + - * / % 加 减 乘 除 模(整数取余) 1.1 这里的加法减法乘法运算与数学中相同,但除则有些不同: 对于只涉及整数的除法是整数除法,其结果是两个整数的商,是一个整数。...: 1.2 模% 模操作符**只适用于整数间的运算,**结果是两个整数相除的余数并且是一个整数。...位操作符 3.1 分类 & 按位与 | 按位或 ^ 按位异或 注意: 其操作数只能是整数。 这里的位是二进制位 3.2 按位与 & 二进制对应的为相与,二者同时为1时这一位的结果才为1,否则为0。...7.1 分类 && 逻辑与 || 逻辑或 7.2 使用 &&、||是双目操作符,有两个操作数。 对于&&,当两个操作数都为真时,表达式的结果才为真(1),其他情况均为假(0)。...对于无符号整数高位直接补0 对于有符号整数 正数:char a = 1; 1的二进制补码为00000001 整型提升(高位补0)之后00000000 00000000 00000000 00000001
这些指令用于不同的场景下进行操作,如下所述: FADD 指令用于将两个浮点数相加,并将结果存储到浮点寄存器中。FADD指令支持多种操作数类型,包括无操作数模式、寄存器操作数和内存操作数等。...与FADD指令不同,其支持的数据类型只有整数类型,而没有浮点数类型。使用FIADD指令时,要将操作数用一个寄存器或内存地址表示。...它从存储有符号整数的内存地址或寄存器中装载整数值,并将其作为源操作数,从浮点寄存器中的另一个浮点数中减去。...与FISUB类似,它加载一个有符号整数并将其作为源操作数组合浮点寄存器中另一个浮点数进行乘法运算。...例如,将栈顶的两个单精度浮点数相除,并将结果存储到内存z中,可以使用以下指令: FDIVP ST(1), ST(0) FSTP dword ptr [z] FIDIV 指令用于将浮点寄存器中的另一个浮点数除以有符号整数
这些指令用于不同的场景下进行操作,如下所述:FADD 指令用于将两个浮点数相加,并将结果存储到浮点寄存器中。FADD指令支持多种操作数类型,包括无操作数模式、寄存器操作数和内存操作数等。...与FADD指令不同,其支持的数据类型只有整数类型,而没有浮点数类型。使用FIADD指令时,要将操作数用一个寄存器或内存地址表示。...它从存储有符号整数的内存地址或寄存器中装载整数值,并将其作为源操作数,从浮点寄存器中的另一个浮点数中减去。...与FISUB类似,它加载一个有符号整数并将其作为源操作数组合浮点寄存器中另一个浮点数进行乘法运算。...例如,将浮点寄存器ST(0)中的值乘以16位有符号整数 y,并将结果存储回ST(0),可以使用以下指令:FILD word ptr [y]FMUL ST(0), ST(0)接下来我们通过一个案例,并使用三种不同的浮点数乘法指令
这些状态标志允许单个的算术操作产生三种不同数据类型的结果:无符号整型,有符号整型以及BCD整型。...SF标志指示有符号整数的符号位,ZF指示结果为零。此外在执行多倍精度算术运算时,CF标志用来将一次运算过程中带进位的加法(ADC)或带借位的减法(SBB)产生的进位或借位传递到下一次运算过程中。...OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。...OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。...OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。
有[+0]和[-0]之分 补码: 若X>0, 则 [X]补 = [X]反= [X]原 若X<0, 则 [X]补 = [X]反+1 没有[+0]和[-0]之分 无符号整数的表示范围(n表示字长): 0...加(减)法运算时,若最高位有进(借)位则CF=1 OF:溢出标志位。当算术运算的结果超出了有符号数的可表达范围时,OF=l ZF:零标志位。当运算结果为零时ZF=1 SF:符号标志位。...(DX:AX),例如:AX=0xFFFE, 转为32位带符号位的整数时,DX=0xFFFF,AX=0XFFFE.又例如:AX=0x0002,转为带符号位的整数时DX=0x0000,AX=0x0002....有符号除法指令 格式: IDIV OPRD 指令格式及对操作数的要求与DIV指令相同。...常用于两个无符号数大小比较 JZ/JNZ 判断ZF的状态。常用于循环体的结束判断 JO/JNO 判断OF的状态。常用于有符号数溢出的判断 JP/JNP 判断PF的状态。
,结果送到目的操作数 2.AND指令设置CF = OF = 0,根据结果设置SF、ZF和PF状态,而对AF未定义 AND 就是C语言的与运算,1 & 1 = 1 1&0 = 0 2.逻辑指令 OR(...逻辑右移SHR 值CF位补零 SAR则补符号位 移位指令对标志的影响 按照移入的位设置进位标志CF 根据移位后的结果影响SF、ZF、PF 对AF没有定义 如果进行一位移动,则按照操作数的最高符号位是否改变...,相应设置溢出标志OF:如果移位前的操作数最高位与移位后操作数的最高位不同(有变化),则OF = 1;否则OF = 0。...当移位次数大于1时,OF不确定 移位乘法和除法 逻辑左移一位,相当于无符号的数*2 逻辑右移一位相当于无符号数/2 7.循环移位指令 作用: 将操作数从一端移出的位返回到另一端形成循环...如果进行一位移动,则按照操作数的最高符号位是否改变,相应设置溢出标志OF:如果移位前的操作数最高位与移位后操作数的最高位不同(有变化),则OF = 1;否则OF = 0。
输入和输出设备共称为外部设备,输入设备用于输入原始数据及各种命令,最常见的就是键盘,而输出设备则用于输出计算机运行结果,最常见的就是屏幕。...运算的结果是放在累加器中的,运算器中至少要有一个累加寄存器。 数据缓存寄存器(DR):对内存储器进行读/写时,用 DR 暂存有内存储器读/写的一套指令或一个数据中,将不同时间段内读/写的数据分隔。...机器数又分为有符号数和无符号数。其中,无符号数对应正数,表示在机器数中没有符号位。对于无符号数,如果约定小数点的位置在机器数的最低位之后,则该数为纯整数。...如果一个数是正数,那么它的补码与原码和反码一样。而如果一个数为负数,则补码为反码末位加 1。此时 0 有惟一的编码表示。...[+0]_补 = [-0]_补 = 00000000 移码 移码的表示与补码有很大关系,它就是将一个数的补码的符号位取反即可。如 +1 的补码为 00000001,那么它的移码为 10000001。
汇编语言是一种面向机器的低级语言,用于编写计算机程序。汇编语言与计算机机器语言非常接近,汇编语言程序可以使用符号、助记符等来代替机器语言的二进制码,但最终会被汇编器编译成计算机可执行的机器码。...它记录了上一个操作的结果,这些结果可以用于下一条指令的条件转移或其他操作。标志寄存器通常包含一些二进制位(标志位),每个标志位用于表示不同的条件或状态。不同的架构和体系结构会有不同的标志位设置。...溢出标志位(Overflow Flag,OF):当上一个操作的结果产生了溢出时,将设置该标志位。 符号标志位(Sign Flag,SF):当上一个操作的结果为负数时(最高位为1),将设置该标志位。...该指令的语法与SUB指令相同,但是CMP指令不会改变目标操作数的值,只对源操作数和目标操作数进行逐位减法运算,并根据运算结果设置标志位。...JNO:当溢出标志位 (OF) 为 0 时跳转,即前一个操作执行结果没有产生溢出。 JS:当符号标志位 (SF) 为 1 时跳转,即前一个操作执行结果为负数。
汇编语言是一种面向机器的低级语言,用于编写计算机程序。汇编语言与计算机机器语言非常接近,汇编语言程序可以使用符号、助记符等来代替机器语言的二进制码,但最终会被汇编器编译成计算机可执行的机器码。...它记录了上一个操作的结果,这些结果可以用于下一条指令的条件转移或其他操作。标志寄存器通常包含一些二进制位(标志位),每个标志位用于表示不同的条件或状态。不同的架构和体系结构会有不同的标志位设置。...溢出标志位(Overflow Flag,OF):当上一个操作的结果产生了溢出时,将设置该标志位。符号标志位(Sign Flag,SF):当上一个操作的结果为负数时(最高位为1),将设置该标志位。...该指令的语法与SUB指令相同,但是CMP指令不会改变目标操作数的值,只对源操作数和目标操作数进行逐位减法运算,并根据运算结果设置标志位。...JNO:当溢出标志位 (OF) 为 0 时跳转,即前一个操作执行结果没有产生溢出。JS:当符号标志位 (SF) 为 1 时跳转,即前一个操作执行结果为负数。
表示为十六进制,使用a-f %X 表示为十六进制,使用A-F %U 表示为Unicode格式:U+1234,等价于"U+%04X" 浮点数与复数的两个组分: %b 无小数部分、二进制指数的科学计数法,如...整数如果是无符号类型自然输出也是无符号的。类似的,也没有必要指定操作数的尺寸(int8,int64)。 宽度通过一个紧跟在百分号后面的十进制数指定,如果未指定宽度,则表示值时除必需之外不作填充。...%e和%f的默认精度是6,%g的默认精度是可以将该值区分出来需要的最小数字个数。 对复数,宽度和精度会分别用于实部和虚部,结果用小括号包裹。...如果操作数实现了error接口,Error方法会用来生成字符串,随后将按给出的flag(如果有)和verb格式化。 4. ...复合类型的操作数,如切片和结构体,格式化动作verb递归地应用于其每一个成员,而不是作为整体一个操作数使用。
3,有符号数与无符号数运算: 1.只有两个操作数都是有符号数,才会把两个操作数都看作有符号数计算,否则无论是有符号数还是无符号数都会按照无符号数计算。...2,当变量定义为无符号时,将输入的值当做无符号数,按照无符号数的计算规则来进行计算,进行大小比较。计算得到的输出值按照无符号数进行解析时,结果才正确。...3,当变量定义为有符号类型时,输入的数值被转换为补码,按照补码的计算规则来进行数值计算,输出的计算结果要按照补码来解析。...第二组(3,4,5,6行)的变量定义为有符号,此时,用有符号数(补码)的形式来解析输入输出数值,结果才正确。如果用无符号数的形式来解析输入输出数值,结果反而正确。...如下图是错误解码(将有符号数按照无符号数显示,将有符号数按照无符号数显示)时,显示计算输出结果不准确: ?
因此,取模运算也遵从与算术运算相同的规律,即如果两个操作数均是整型值,则结果为整型,否则为浮点型。 对于整型操作数而言,取模运算的含义没有什么特别的,其结果的符号永远与第二个操作数的符号保持一致。...特别地,对于任意指定的正常数K,即使x是负数,表达式x%K的结果也永远在[0,K-1]之间。例如,对于任意整数值i,表达式i%2的结果均是0或1。 对于实数类型的操作数而言,取模运算有一些不同。...如果想进行无偏取整,即向距离最近的偶数取整半个整数,上述公式在x + 0.5是奇数的情况下产生不正确的结果: >math.floor(3.5 + 0.5) --4 (ok) >math.floor(...0x7ff…fff,即除最高位(符号位,零为非负整数)外其余比特位均为1.当我们对0x7ff…fff加1时,其结果变为0x800…000,即最小可表示的整数。...由于整型值和浮点型值的表示范围不同,因此当超过它们的表示范围时,整型值和浮点型值的算术运算会产生不同的结果: >math.maxinteger + 2 -- -9223372036854775807
布尔位运算符 表 1 中列举的运算符可以对操作数的每个位进行布尔运算。这种二元运算符把两个不同操作数内相同位置的位关联起来。...在实际移位操作之前,两个操作数都要进行整数提升(promotion)。右边操作数不可以为负值,并且必须少于左边操作数在整数提升之后的位长。如果不符合这些条件,程序运行结果将无法确定。...移动超出左边边界的位则直接抛弃。向左移动 y 个位置,就等同于将左操作数乘以 2^{y}:如果左操作数 x 是无符号类型,那么表达式 x<<y 的结果等于表达式 x×2^{y} 的值。...因此,在前面的例子,n<<2 的值为 n×4,也就是 44。 在向右位移运算时,如果左操作数是无符号类型,或者左操作数是带符号类型但为非负值,则左边多出来的位用 0 来填充。...在这种情况下,表达式 x>>y 的结果等效于表达式 x/2^{y} 的值。如果左操作数是负值,那么由编译器决定用于填充至左边多出来的位的内容,可能是 0,也可能是符号位。
领取专属 10元无门槛券
手把手带您无忧上云