base——整数类型&&进制

数据类型内存空间(8位等于1字节)取值范围
byte8位-128~127
short16位-32768~32767
int32位-2147483638~2147463637
long64位-9223372036854775808~9223372036854775807

 

    在定义以上4种类型变量时,要注意变量的取值范围,超出相应范围就报错。对于long类型赋值,若付给的值大于int的值或小于int型的最小值,则需要在数字后面加L或者小写的l;

 

 

 Java中是可以给变量赋值为负数的

public class TypeOfData {
    int i = -1;
}

八进制:如1023(转换成十进制数为83)、-0123(转换成十进制数为-83)  ,必须以0开头

十进制:十进制的表现形式就是日常的阿拉伯数字,不能以0开头,(0除外)

十六进制:如0x25(转换成十进制为37)、0Xb01e(转换成十进制数为45086);

 

为什么要用0或者字母方式表示十进制,十六进制

由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决问题。   

  但,二进制数太长了。比如int   类型占用4个字节,32位。比如100,用int类型的二进制数表达将是:     0000   0000   0000   0000   0110   0100   

  面对这么长的数进行思考或操作,没有人会喜欢。因此,C,C++,以及java中   没有提供在代码直接写二进制数的方法。   

  八进制数的表达方法   

  如何表达一个八进制数呢?如果这个数是 876,我们可以断定它不是八进制数,因为八进制数中不可能出7以上的阿拉伯数字。但如果这个数是123、是567,或12345670,那么它是八进制数还是10进制数,都有可能。   

  所以规定,一个数如果要指明它采用八进制,必须在它前面加上一个0(零),如:123是十进制,但0123则表示采用八进制。这就是八进制数的表达方法。   

  现在,对于同样一个数,比如是100,我们在代码中可以用平常的10进制表达,例如在变量初始化时:     int   a   =   100;     我们也可以这样写:   

  int   a   =   0144;   //0144是八进制的100;一个10进制数如何转成8进制,我们后面会学到。     千万记住,用八进制表达时,你不能少了最前的那个0。否则计算机会通通当成10进制。不过,有一个地方使用八进制数时,却不能使用加0,那就是我们前面学的用于表达字符的“转义符”表达法。   

  十六进制数的表达方法   

  如果不使用特殊的书写形式,16进制数也会和10进制相混。随便一个数:9876,就看不出它是16进制或10进制。   

  16进制数必须以   0x开头。比如   0x1表示一个16进制数。而1则表示一个十进制。另外如:0xff,0xFF,0X102A,等等。其中的x也不区分大小写。(注意:0x中的0是数字0,而不是字母O)     以下是一些用法示例:     int   a   =   0x100F;     int   b   =   0x70   +   a;   

  至此,我们学完了所有进制:10进制,8进制,16进制数的表达方式。最后一点很重要,10进制数有正负之分,比如12表示正12,而-12表示负12;但8进制和16进制只能用达无符号的正整数,如果你在代码中里:-078,或者写:-0xF2,编译器并不把它当成一个负数。   

由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决问题但,二进制数太长了比如int   就用这些方法表示。

负的十六进制和8进制也是可以被编译的。

转载于:https://www.cnblogs.com/wy20110919/p/8081948.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是C++实现大整数进制转换的示例代码: ```cpp #include <iostream> #include <string> #include <algorithm> using namespace std; // 将字符串表示的数字转换为整数数组 void str2num(string str, int num[], int &len, int &dot_pos, int &dot_len) { len = 0; dot_pos = -1; dot_len = 0; for (int i = 0; i < str.length(); i++) { if (str[i] == '.') { dot_pos = len; } else { num[len++] = str[i] - '0'; } } if (dot_pos != -1) { dot_len = len - dot_pos - 1; } } // 将整数数组转换为字符串表示的数字 string num2str(int num[], int len, int dot_pos, int dot_len) { string str = ""; for (int i = 0; i < len; i++) { str += num[i] + '0'; if (i == dot_pos) { str += '.'; } } if (dot_pos == -1) { str += '.'; } for (int i = 0; i < dot_len; i++) { str += '0'; } return str; } // 将整数数组从from_base进制转换为to_base进制 void base_convert(int num[], int &len, int from_base, int to_base) { int new_num[1000], new_len = 0; while (len > 0) { int r = 0; for (int i = len - 1; i >= 0; i--) { int t = r * from_base + num[i]; num[i] = t / to_base; r = t % to_base; } new_num[new_len++] = r; while (len > 0 && num[len - 1] == 0) { len--; } } for (int i = 0; i < new_len; i++) { num[i] = new_num[new_len - i - 1]; } len = new_len; } int main() { string str; int from_base, to_base; cin >> str >> from_base >> to_base; int num[1000], len, dot_pos, dot_len; str2num(str, num, len, dot_pos, dot_len); // 将整数部分从from_base进制转换为10进制 int int_num[1000], int_len = 0; for (int i = 0; i < dot_pos; i++) { int r = 0; for (int j = int_len - 1; j >= 0; j--) { int t = r * from_base + int_num[j]; int_num[j] = t % 10; r = t / 10; } while (r > 0) { int_num[int_len++] = r % 10; r /= 10; } int_num[int_len++] = num[i]; } reverse(int_num, int_num + int_len); // 将小数部分从from_base进制转换为10进制 int dot_num[1000], dot_len = 0; for (int i = dot_pos + 1; i < len; i++) { int r = 0; for (int j = 0; j < dot_len; j++) { int t = r * from_base + dot_num[j]; dot_num[j] = t % 10; r = t / 10; } while (r > 0) { dot_num[dot_len++] = r % 10; r /= 10; } dot_num[dot_len++] = num[i]; } // 将整数部分和小数部分分别从10进制转换为to_base进制 base_convert(int_num, int_len, 10, to_base); base_convert(dot_num, dot_len, 10, to_base); // 将整数部分和小数部分合并为一个数组 for (int i = 0; i < int_len; i++) { num[i] = int_num[i]; } num[int_len++] = -1; for (int i = 0; i < dot_len; i++) { num[int_len++] = dot_num[i]; } // 将整个数组转换为字符串表示的数字 str = num2str(num, int_len, dot_pos, dot_len); cout << str << endl; return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值