说-128到底是10000000还是11111111,这不用说当然是10000000(2的7次方等128嘛)
除2取余倒序排列,推出128=10000000,,-128的二进制是128的二进制取反加1,所以-128的二进制为10000000。(这样的话128和-128岂不是一个数了吗)
计算机里这个的范围应该是-127-128(没有-128的)
希望采纳,继续采纳!
用编程思想给你解释吧,把你的十进制数除以2,留余数(不是1就是0),然后把这个商再除以2,一直循环下去,直到商变成1,把这个1算上先前的倒序余数就是该十进制的二进制。inaryNum[16];//存放转换后得到的二进制码while((num/2)!=1){//判断条件为:除以2之后的商不等于1binaryNum[count]=num%2;//取余后的数字存入数组num/=2;//进行下一轮的判断count++;//此变量用来指定数组下标}binaryNum[count+1]=1;//最后一次除法做完以后,剩下的商一定是1,所以在最后手动添加一个1for(inti=count+1;i=0;i--){printf("%d",binaryNum[i]);}//倒序输出
简单的异或加密,自己不写是损失
==========
#include cstdio
using namespace std;
void binByte(char *bin, unsigned char b){
char i=7;
while(b0){
bin[i]=(b1)+'0';
b=1;
i--;
}
while(i=0){
bin[i--]='0';
}
}
int main()
{
char *src="NCTV";
char bin[9]={0};
unsigned char *p=(unsigned char*)src;
unsigned char pwd=0x59;//1011001
unsigned char code;
while(*p!='\0'){
code=*p^pwd;
binByte(bin,*p);
printf("%c %u %s 加密成 %u ",*p,*p,bin,code);
binByte(bin,code);
printf("%s 解密成",bin);
code^=pwd;
binByte(bin,code);
printf(" %c %u %s",code,code,bin);
printf("\n");
p++;
}
return 0;
}
==============
输出:
N 78 01001110 加密成 23 00010111 解密成 N 78 01001110
C 67 01000011 加密成 26 00011010 解密成 C 67 01000011
T 84 01010100 加密成 13 00001101 解密成 T 84 01010100
V 86 01010110 加密成 15 00001111 解密成 V 86 01010110
========
一个简单而专业的办法是,你用DES加密,加密后,这句话就成了密文。
还有一个办法,你自己随便编一个128的乱序ASCII字符对应表,其实就是在程序中加个128字节的常量数组,然后将你的那句话逐字节的查表替换就可以生成密文了。
要从右到左用二进制的每个数去乘以2的相应次方,小数点后则是从左往右
例如:二进制数1101.01转化成十进制
1101.01(2)=1*20+0*21+1*22+1*23 +0*2-1+1*2-2=1+0+4+8+0+0.25=13.25
所以总结起来通用公式为:
abcd.efg(2)=d*20+c*21+b*22+a*23+e*2-1+f*2-2+g*2-3
或者用下面这种方法:
把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。这种做法称为"按权相加"法。
扩展资料:
例如:二进制1011转十进制为11,算法根十进制基本一样,比如十进制。
2130=2乘以10的三次方+1乘以10的二次方+3乘以10的一次方+0乘以10的0次方。而二进制只要把上面的10换成2就行了。
二进制11011=1乘以2的四次方+1乘以2的三次方+0乘以2的二次方+1乘以1的一次方+1乘以2的0次方。
十进制转二进制:十进制50,将50整除2得25余数为0,记住这个余数,接下来用25整除2得12余数为1,接着用12整除2得6余数为0,依此类推,6整除2得3余数为0,3整除2得1余数为1,1整除2得0余数为1。直到整除结果等于0为止。然后将所有的余数倒序写出来得110010,即就是50的二进制表示。
参考资料:二进制 百度百科
十进制 百度百科