<php
$num = $_POST['num'];//获取数据
if($num<0){
$num=abs($num);
echo '是负数,将$num存入负数字段';
}else{
echo '是正数,将$num存入正数字段';
}
>描述不完整。
如果是一批正的数据都需要变成负数,可以现在一个空白单元格输入 -1 ,然后复制该单元格,选定目的区域(不要双击进入编辑!)然后鼠标右键“选择性粘贴”勾选“数值”和“乘”即可。这是因为win下是32bit的环境,Linux用的是64位环境。
-2在32bit下的数据为0xFFFF FFFE
-2在64bit下的数据为0xFFFF FFFF FFFF FFFE
而你那未经考虑就直接在64bit下可会导致
得到0x0000 0000 FFFF FFFE得值4294967294
解决办法:根据-2的“产生算法”或“数据来源”作出修改或应对
比如加入
if(PHP_INT_SIZE===4){
//在32bit系统下怎么处理-2
}else{
//在64bit系统下怎么处理-2
}确实跟补码有关
计算机为了使减法变为加法把负数用补码来存储(正数也是只不过正数的补码与原码相同)
以钟表为例
例如: 假设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法:
一种是倒拨4小时,即:10-4=6
另一种是顺拨8小时:10+8=12+6=6
计算机内部计算类似于上面 它把(-4)变成储存为12-4=8(即所谓的补码)
而计算机计算10-4时它就变成10+8=18 而钟表最大值为12所以18-12=6 于是计算就完成了
(1)正数的补码:与原码相同(因为它本身是加数计算机可以计算所以不用变)。
例如,+9的补码是00001001。
(2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。(因为它不是是加数计算机不可以计算 所以要变成补码)
例如,-7的补码:因为是负数,则符号位为“1”,整个为10000111;其余7位为-7的绝对值+7的原码
0000111按位取反为1111000;再加1,所以-7的补码是11111001。简单点就是10000000( 128)-0000111(7)=11111001(121)
而C语言中有符号的整数为16位从00000000,00000000 到011111111,11111111 即0到32767为正数所以补码为原码
从11111111,11111111 到10000000,00000000
为-1到-32768如果我们在编辑Excel的时候,碰到了需要将表格中的正数变成负数应该怎么办呢?当然如果数据不多的话,我们选中它然后前面添加一个“-”符号即可,但是如果数据很多,这样显然是很浪费时间的,下面我教你一个非常简单的转换方法
首先,我们打开Excel,然后在表格中输入一行正数数字为例,如下图所示;
然后我们在其他任意空白单元格输入数值“-1”,如图一;点击选中此单元格以后,然后点击鼠标右键“复制”;
接下来我们全选打算变为负数的区域,比如A1到A10单元格,同样点击鼠标右键然后点击“选择性粘贴”,如图所示
然后会d出选择性粘贴对话框,我们点击运算下面的“乘”,其他的无需做任何更改;
点击对话框的确定,返回到Excel表格,我们就发现刚才A列的数字全部变成了负数(负数批量变正数的 *** 作方法也一样)
要将负数转换为正数(这称为绝对值),请使用Mathabs() 。 此Mathabs()方法的工作方式如下:“ number = (number < 0 -number : number); ”。
看一个完整的例子:
package com mkyong;
public class app{
public static void main(String[] args) {
int total=1+1+1+1+(-1);
//output 3
System out print1n("Total :”+ total);
int total2 =1+1+1+1+ Mathabs(-1);
//output 5
System out print1n("Total 2 (absolute value) :”+ total2) ;
}
}
输出量
Total : 3
Total 2 (absolute value) : 5
在这种情况下, Mathabs(-1)会将负数1转换为正数1。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)