C++_int负数转unsigned
  6DMaaPzJglxt 2023年12月05日 24 0



有符号数和无符号数

  • 有符号数
  • 无符号数
  • 负整数转化为无符号数
  • 编程测试


有符号数

有符号数中有一个符号位,正数为0,负数为1.
例如
int a=3;
因为c++中的int占32位
3的二进制数表示为
0000 0000 0000 0000 0000 0000 0000 0011
-3的二进制数表示为
1000 0000 0000 0000 0000 0000 0000 0011

无符号数

不存在符号位
举例
int a=-3;
int占32位
3的二进制表示为
原码:0000 0000 0000 0000 0000 0000 0000 0011
补码:0000 0000 0000 0000 0000 0000 0000 0011
-3的二进制数表示为
原码:1000 0000 0000 0000 0000 0000 0000 0011
补码:1111 11111 1111 1111 1111 1111 1111 1101
其实就是负数的补码

负整数转化为无符号数

整数int转无符号数
直接读取负数的补码
为了快速运算
若z是负整数,那么z对应的无符号数表达式如下:
C++_int负数转unsigned_有符号数

编程测试

#include<iostream>
#include<math.h>
using namespace std;
int main(int argc, char* argv)
{
	int a = -3;
	printf("占字节数:%d\n", sizeof(a));
	printf("a=%u\n", a);//输出其无符号数
	return 0;
}

运行结果,得出int占4个字节,一个字节占8位,就是32位的二进制位。

编译器-3的无符号数是4294967293

C++_int负数转unsigned_有符号数_02


使用计算器检验结果是否是4294967293

计算C++_int负数转unsigned_无符号数_03

C++_int负数转unsigned_补码_04


ok,没问题!

C++_int负数转unsigned_有符号数_05


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月05日 0

暂无评论

6DMaaPzJglxt