C++_int负数转unsigned

简介: C++_int负数转unsigned

有符号数

有符号数中有一个符号位,正数为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对应的无符号数表达式如下:

u n s i g n e d ( z ) = 2 z 所 占 的 位 数 − ( − z ) . unsigned(z) = 2^{z所占的位数}-(-z).unsigned(z)=2z(z).

编程测试

#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

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

计算2 32 − 3 2^{32}-32323

ok,没问题!

目录
相关文章
|
6月前
|
SQL 关系型数据库 MySQL
unsigned int 虽然mysql支持,但是不建议使用,因为可能在未来某个版本删除
unsigned int 虽然mysql支持,但是不建议使用,因为可能在未来某个版本删除
45 2
|
编译器
unsigned long int 和 unsigned long一样吗?
unsigned 代表的是无符号的整形数
274 0
|
6月前
|
存储 人工智能 编译器
learn_C_deep_5 (温故知新、sigend char a = -128的深度理解、unsigned int类型的写法规范)
learn_C_deep_5 (温故知新、sigend char a = -128的深度理解、unsigned int类型的写法规范)
|
6月前
|
存储 编译器 程序员
learn_C_deep_4 (类型和变量命名、sizeof(int) *p表示什么意思、原码、反码和补码的概念、计算机中数据计算时,为什么要转为二级制、unsigned和signed关键字)
learn_C_deep_4 (类型和变量命名、sizeof(int) *p表示什么意思、原码、反码和补码的概念、计算机中数据计算时,为什么要转为二级制、unsigned和signed关键字)
|
6月前
|
存储 编译器 C++
C++系列-第1章顺序结构-4-整型int
C++系列-第1章顺序结构-4-整型int
|
6月前
|
存储 C语言
学习总结(位操作符;循环输入的三种方式;交换两个变量值的三种方法;打印数字对应的二进制;unsigned int 与int 的区别;改变特定位数0/1;&&和||的连续操作(与前置,后置结合))
学习总结(位操作符;循环输入的三种方式;交换两个变量值的三种方法;打印数字对应的二进制;unsigned int 与int 的区别;改变特定位数0/1;&&和||的连续操作(与前置,后置结合))
66 0
|
存储 小程序 程序员
8k字详解整型(int)/字符型(char)/浮点型(float)/有符号(signed)/无符号(unsigned)数据在内存中的存储【程序员内功修炼/C语言】
8k字详解整型(int)/字符型(char)/浮点型(float)/有符号(signed)/无符号(unsigned)数据在内存中的存储【程序员内功修炼/C语言】
142 0
C++ int const 和 const int 的区别
C++ int const 和 const int 的区别
171 0