重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
你问题是使用unsigned把负数转正数吧?
成都创新互联服务项目包括库尔勒网站建设、库尔勒网站制作、库尔勒网页制作以及库尔勒网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,库尔勒网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到库尔勒省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
用unsigned把负数转正并不改变变量的内存形态,也就是二进制编码不会改变,而逻辑数值上的变化可通过二进制的补码去计算,等价于2^变量位数减去负数绝对值(^表示冥)。
比如一个32位的负数值是-N,那么转化成unsigned的值是2^32 - N。
再比如16位整型,short a = -1; 转成无符号的值为 (unsigned short)a == pow(2, 16) - 1 == 65535;
数在计算机都以二进制方式存放的,二进制负数以补码形式存放,第一位为符号位,1表明是负数。
如果不懂什么是补码:
负数的补码是对其原码逐位取反,但符号位除外;然后整个数加1。 同一个数字在不同的补码表示形式里头,是不同的。比方说-15的补码,在8位2进制里头是11110001,然而在16位2进制补码表示的情况下,就成了1111111111110001。在这篇补码概述里头涉及的补码转换默认了把一个数转换成8位2进制的补码形式,每一种补码表示形式都只能表示有限的数字。 【例2】求-7的补码。 因为给定数是负数,则符号位为“1”。 后七位:+7的原码(0000111)→按位取反(1111000)→加1(1111001) 所以-7的补码是11111001。
需要准备的材料分别有:电脑、C语言编译器。
1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp。
2、在test.cpp文件中,输入C语言代码:int a = -1024;printf("%d", -a);。
3、编译器运行test.cpp文件,此时成功把负数转化为正数进行了输出。
可以加if判断啊,若小于零取反
如果读取的是字符串,可以使用atoi函数(把字符型转化为整形)
另外二楼说的也可行,用abs(a)函数