|
发表于 2015-7-23 19:06:01
|
显示全部楼层
- template<typename T>
- void PrintComplement(T num)
- {
- for (int i = sizeof(T)*8 - 1; i >= 0; i--)
- printf("%d", (num >> i) & 0x01);
- }
- #include<stdio.h>
- #include<stdlib.h>
- int main(void){
- int i=-3;
- char str[30];
- struct bin{
- char nCHAR:1;
- }use;
- while(i<=3){
- use.nCHAR=i;
- itoa(use.nCHAR,str,2);
- printf("use.nCHAR=%2d ,i=%2d Bin=%s\n",use.nCHAR,i,str);
- PrintComplement(use.nCHAR);
- printf("\n");
- i++;
- }
- return 0;
- }
复制代码
编译器没那么智能 能自动打印出补码
你给他指定啥 就是啥
比如 指定%d, 那么编译器认为这个东西就是一个有符号的整形, 直接打印, 如果你制定一个字符a, 让他以%d打印出来 他直接打印一个97出来
同理 你给一个int a=97, 然后printf("%c", a), 他直接打印出一个字符a来, 占位符只会打印你指定的形式 编译器不会把补码打印出来
这个函数就是按位取, 把一个变量的内存中的每一位(补码)都取出来 然后打印出来 |
评分
-
查看全部评分
|