大家好,又见面了,我是你们的朋友全栈君。
(1)正数的补码与原码相同; (2)负数的符号位为1,其余位为该数绝对值的原码按位取反,然后整个数加1,即为其补码。(总的来说:补码=原码取反+1,只不过负数带有符号位需特殊考虑。。。) --------------------------------------------------------------------------------------------------------------------------------- 0xffffffff是多少? 0xffffffff表示的是一个十六进制数 1.将其转换为十进制数 0xffffffff=16x10^7+16x10^6+...+16x10^0=4294967295 2.将其转换为二进制数 十六进制转换为二进制就是直接把每位转换成二进制就可以了 f(15)变成二进制:1111,则 0xffffffff = 1111 1111 1111 1111 1111 1111 1111 1111 (8个F的二进制形式, 一个F占4个字节 ) 即32位数都是1的二进制数 0x代表16进制,后面是数字,十进制是4294967295#include <stdio.h> int main() { int i =0xffffffff; unsigned int j = 0xffffffff; printf("i: %u %d\n",i ,i); printf("j: %u %d\n",j ,j); printf("-1: %u\n",-1); return 0; } /* 我擦,终于想通了带符号的int变量i当以“%u”(无符号格式)输出时,把最高位符号位给算进去了 所以 i和j “%u”的相同。 -1的补码,计算机中符号数以补码形式存放即: 1111 1111 1111 1111 1111 1111 1111 1111 (32位) 当以无符号输出时也是: 4294967295 */
有图有真相:
int、unsigned int、long int、long long 类型的最大值和最小值:
#include <limits> #include <iostream> using namespace std; int main (){ cout<< numeric_limits<int>::max() << endl; cout<< numeric_limits<unsigned>::max() <<endl; cout<< numeric_limits<long int>::max() <<endl; cout<< numeric_limits<long long>::max() <<endl; cout<<"-----------------------------"<<endl; cout<< numeric_limits<int>::min() << endl; cout<< numeric_limits<unsigned>::min() <<endl; cout<< numeric_limits<long int>::min() <<endl; cout<< numeric_limits<long long>::min() <<endl; return 0; }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/145222.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...