我有一个号码,我想用二进制打印。我不想通过编写算法来实现它,Java中是否有内置函数?
答案 0 :(得分:389)
假设你的意思是“内置”:
int x = 100;
System.out.println(Integer.toBinaryString(x));
(Long
有一个类似的方法,BigInteger
有一个实例方法,您可以在其中指定基数。)
答案 1 :(得分:234)
这里不需要只依赖于二进制或任何其他格式...一个灵活的内置函数可用于打印你想要的程序中的任何格式.. Integer.toString(int,representation);
Integer.toString(100,8) // prints 144 --octal representation
Integer.toString(100,2) // prints 1100100 --binary representation
Integer.toString(100,16) //prints 64 --Hex representation
答案 2 :(得分:55)
System.out.println(Integer.toBinaryString(343));
答案 3 :(得分:21)
我需要一些东西来很好地打印出来并将每个n位的位分开。换句话说,显示前导零并显示如下内容:
n = 5463
output = 0000 0000 0000 0000 0001 0101 0101 0111
所以我写的是:
/**
* Converts an integer to a 32-bit binary string
* @param number
* The number to convert
* @param groupSize
* The number of bits in a group
* @return
* The 32-bit long bit string
*/
public static String intToString(int number, int groupSize) {
StringBuilder result = new StringBuilder();
for(int i = 31; i >= 0 ; i--) {
int mask = 1 << i;
result.append((number & mask) != 0 ? "1" : "0");
if (i % groupSize == 0)
result.append(" ");
}
result.replace(result.length() - 1, result.length(), "");
return result.toString();
}
像这样调用它:
public static void main(String[] args) {
System.out.println(intToString(5463, 4));
}
答案 4 :(得分:7)
旧学校:
int value = 28;
for(int i = 1, j = 0; i < 256; i = i << 1, j++)
System.out.println(j + " " + ((value & i) > 0 ? 1 : 0));
答案 5 :(得分:5)
检查这个逻辑可以将数字转换为任何基数
public static void toBase(int number, int base) {
String binary = "";
int temp = number/2+1;
for (int j = 0; j < temp ; j++) {
try {
binary += "" + number % base;
number /= base;
} catch (Exception e) {
}
}
for (int j = binary.length() - 1; j >= 0; j--) {
System.out.print(binary.charAt(j));
}
}
或强>
StringBuilder binary = new StringBuilder();
int n=15;
while (n>0) {
if((n&1)==1){
binary.append(1);
}else
binary.append(0);
n>>=1;
}
System.out.println(binary.reverse());
答案 6 :(得分:3)
这是打印整数的内部二进制表示的最简单方法。 例如:如果我们将n取为17,那么输出将是: 0000 0000 0000 0000 0000 0000 0001 0001
void bitPattern(int n) {
int mask = 1 << 31;
int count = 0;
while(mask != 0) {
if(count%4 == 0)
System.out.print(" ");
if((mask&n) == 0)
System.out.print("0");
else
System.out.print("1");
count++;
mask = mask >>> 1;
}
System.out.println();
}
答案 7 :(得分:2)
public static void main(String[] args)
{
int i = 13;
short s = 13;
byte b = 13;
System.out.println("i: " + String.format("%32s",
Integer.toBinaryString(i)).replaceAll(" ", "0"));
System.out.println("s: " + String.format("%16s",
Integer.toBinaryString(0xFFFF & s)).replaceAll(" ", "0"));
System.out.println("b: " + String.format("%8s",
Integer.toBinaryString(0xFFFFFF & b)).replaceAll(" ", "0"));
}
输出:
i: 00000000000000000000000000001101
s: 0000000000001101
b: 00001101
答案 8 :(得分:2)
只需尝试一下。如果范围仅打印给定整数值的二进制值。它可以是正数或负数。
public static void printBinaryNumbers(int n) {
char[] arr = Integer.toBinaryString(n).toCharArray();
StringBuilder sb = new StringBuilder();
for (Character c : arr) {
sb.append(c);
}
System.out.println(sb);
}
输入
5
输出
101
答案 9 :(得分:1)
这个问题已经发布了很好的答案。但是,这是我自己尝试的方式(可能是最简单的逻辑基础→ modulo / divide / add ):
int decimalOrBinary = 345;
StringBuilder builder = new StringBuilder();
do {
builder.append(decimalOrBinary % 2);
decimalOrBinary = decimalOrBinary / 2;
} while (decimalOrBinary > 0);
System.out.println(builder.reverse().toString()); //prints 101011001
答案 10 :(得分:1)
使用32位显示掩码的解决方案,
public static String toBinaryString(int n){
StringBuilder res=new StringBuilder();
//res= Integer.toBinaryString(n); or
int displayMask=1<<31;
for (int i=1;i<=32;i++){
res.append((n & displayMask)==0?'0':'1');
n=n<<1;
if (i%8==0) res.append(' ');
}
return res.toString();
}
System.out.println(BitUtil.toBinaryString(30));
O/P:
00000000 00000000 00000000 00011110
答案 11 :(得分:0)
我认为它是迄今为止最简单的算法(对于那些不想使用内置函数的人):
public static String convertNumber(int a) {
StringBuilder sb=new StringBuilder();
sb.append(a & 1);
while ((a>>=1) != 0) {
sb.append(a & 1);
}
sb.append("b0");
return sb.reverse().toString();
}
示例:
convertNumber(1) - &gt;的&#34; 0B1&#34; 强>
convertNumber(5) - &gt;的&#34; 0b101时&#34; 强>
convertNumber(117) - &gt;的&#34; 0b1110101&#34; 强>
工作原理: while循环向右移动一个数字(用倒数第二个替换最后一个数据等),得到最后一位的值并放置它在StringBuilder中重复,直到没有剩下的位(当a = 0时为止)。
答案 12 :(得分:0)
for(int i = 1; i <= 256; i++)
{
System.out.print(i + " "); //show integer
System.out.println(Integer.toBinaryString(i) + " "); //show binary
System.out.print(Integer.toOctalString(i) + " "); //show octal
System.out.print(Integer.toHexString(i) + " "); //show hex
}
答案 13 :(得分:0)
这个问题在java中很棘手(也可能在其他语言中)。
Integer是32位 signed 数据类型,但Integer.toBinaryString()返回整数参数的字符串表示形式,作为base 2中的 unsigned 整数。
因此,Integer.parseInt(Integer.toBinaryString(X),2)可以生成异常(有符号与无符号)。
安全的方法是使用Integer.toString(X,2);这会产生不那么优雅的东西:
-11110100110
但它有效!!!
答案 14 :(得分:0)
尝试这种方式:
public class Bin {
public static void main(String[] args) {
System.out.println(toBinary(0x94, 8));
}
public static String toBinary(int a, int bits) {
if (--bits > 0)
return toBinary(a>>1, bits)+((a&0x1)==0?"0":"1");
else
return (a&0x1)==0?"0":"1";
}
}
10010100
答案 15 :(得分:0)
给定int x的左边填充零的二进制表示:
{
{
"name": "..dbcjjd",
"value": "1.2.3.4",
"path": "/",
"domain": "abc.com",
"expiry": "Aug 17, 292278994 12:42:55 PM",
"isSecure": true,
"isHttpOnly": false
},
{
"name": "..dbcjjd",
"value": "1.2.3.4",
"path": "/",
"domain": "abc.com",
"expiry": "Jun 22, 2018 4:11:20 PM",
"isSecure": true,
"isHttpOnly": false
}
}
Adding Cookie to driver:
for(Cookie ck : cookieList)
{
Cookie newCookie = new Cookie(ck.getName(),ck.getValue(),domain,
ck.getPath(), ck.getExpiry(), ck.isSecure());
webDriver.manage().addCookie(newCookie);
}
答案 16 :(得分:0)
输入任何十进制数字作为输入。之后,我们将对模和除法进行运算,将给定的输入转换为二进制数。 这是将整数值转换为二进制的Java程序的源代码,以及该二进制的位数(十进制数字)。 Java程序已成功编译并在Windows系统上运行。程序输出也如下所示。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int integer ;
String binary = ""; // here we count "" or null
// just String binary = null;
System.out.print("Enter the binary Number: ");
integer = sc.nextInt();
while(integer>0)
{
int x = integer % 2;
binary = x + binary;
integer = integer / 2;
}
System.out.println("Your binary number is : "+binary);
System.out.println("your binary length : " + binary.length());
}
}
答案 17 :(得分:0)
简单,最简单的解决方案。
public static String intToBinaryString(int integer, int numberOfBits) {
if (numberOfBits > 0) { // To prevent FormatFlagsConversionMismatchException.
String nBits = String.format("%" + numberOfBits + "s", // Int to bits conversion
Integer.toBinaryString(integer))
.replaceAll(" ","0");
return nBits; // returning the Bits for the given int.
}
return null; // if the numberOfBits is not greater than 0, returning null.
}
答案 18 :(得分:0)
由于不接受任何答案,也许您的问题是关于如何在二进制文件中存储整数。 java.io.DataOutputStream可能就是您要寻找的:https://docs.oracle.com/javase/8/docs/api/java/io/DataOutputStream.html
DataOutputStream os = new DataOutputStream(outputStream);
os.writeInt(42);
os.flush();
os.close();
答案 19 :(得分:0)
您可以使用位掩码(1 << k)并对数字进行AND操作! 1 << k在k位置只有一位!
if instance is None:
# if we didn't get an instance, instantiate a new one
self.instance = opts.model()
object_data = {}
答案 20 :(得分:-2)
它使用有符号和无符号值,使用强大的位操作,并在左侧生成第一个零。
public static String representDigits(int num) {
int checkBit = 1 << (Integer.SIZE * 8 - 2 ); // avoid the first digit
StringBuffer sb = new StringBuffer();
if (num < 0 ) { // checking the first digit
sb.append("1");
} else {
sb.append("0");
}
while(checkBit != 0) {
if ((num & checkBit) == checkBit){
sb.append("1");
} else {
sb.append("0");
}
checkBit >>= 1;
}
return sb.toString();
}